Voici un exemple d'un fichier volumineux nommé AT5G60410.gff:
Chr5 TAIR10 gene 24294890 24301147 . + . ID=AT5G60410;Note=protein_coding_gene;Name=AT5G60410
Chr5 TAIR10 mRNA 24294890 24301147 . + . ID=AT5G60410.1;Parent=AT5G60410;Name=AT5G60410.1;Index=1
Chr5 TAIR10 protein 24295226 24300671 . + . ID=AT5G60410.1-Protein;Name=AT5G60410.1;Derives_from=AT5G60410.1
Chr5 TAIR10 exon 24294890 24295035 . + . Parent=AT5G60410.1
Chr5 TAIR10 five_prime_UTR 24294890 24295035 . + . Parent=AT5G60410.1
Chr5 TAIR10 exon 24295134 24295249 . + . Parent=AT5G60410.1
Chr5 TAIR10 five_prime_UTR 24295134 24295225 . + . Parent=AT5G60410.1
Chr5 TAIR10 CDS 24295226 24295249 . + 0 Parent=AT5G60410.1,AT5G60410.1-Protein;
Chr5 TAIR10 exon 24295518 24295598 . + . Parent=AT5G60410.1
J'ai du mal à en extraire des lignes spécifiques en utilisant grep. Je voulais extraire toutes les lignées de type "gène" ou de type "exon", spécifiées dans la troisième colonne. J'ai été surpris quand cela ne fonctionnait pas:
grep 'gene|exon' AT5G60410.gff
Aucun résultat n'est renvoyé. Où me suis-je trompé?
egrep
place.Réponses:
Vous devez échapper au
|
. Ce qui suit devrait faire le travail.la source
Par défaut, grep traite les caractères spéciaux typiques comme des caractères normaux à moins qu'ils ne soient échappés. Vous pouvez donc utiliser ce qui suit:
Cependant, vous pouvez changer son mode en utilisant les formulaires suivants pour faire ce que vous attendez:
la source
Il s'agit d'une manière différente de se vanter de quelques choix:
le
-e
commutateur spécifie différents modèles à faire correspondre.la source
time
commande pour le savoir.Cela fonctionnera:
la source
J'ai trouvé cette question en recherchant sur Google un problème particulier que j'avais impliquant une commande canalisée vers un
grep
commande qui utilisait l'opérateur d'alternance dans une expression régulière, alors j'ai pensé que je contribuerais ma réponse plus spécialisée.L'erreur que j'ai rencontrée s'est avérée être avec l'opérateur de tube précédent (c'est-à-dire
|
) et non avec l'opérateur d'alternance (c'est-|
à- dire identique à l'opérateur de tube) dans l'expression rationnelle grep. La réponse pour moi était d'échapper correctement et de citer comme nécessaires les caractères spéciaux du shell tels que & avant de supposer que le problème était avec mon regex grep qui impliquait l'opérateur d'alternance.Par exemple, la commande que j'ai exécutée sur ma machine locale était:
Cette commande a entraîné l'erreur suivante:
Cette erreur a été corrigée en modifiant ma commande en:
En échappant au
&
caractère avec des guillemets doubles, j'ai pu résoudre mon problème. La réponse n'avait rien à voir avec l'opération d'alternance.la source