La siguiente es una muestra de un archivo grande llamado 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
Tengo problemas para extraer líneas específicas de esto usando grep. Quería extraer todas las líneas que son de tipo "gen" o tipo "exón", especificadas en la tercera columna. Me sorprendió cuando esto no funcionó:
grep 'gene|exon' AT5G60410.gff
No se devuelven resultados. ¿Dónde me he equivocado?
egrep
lugar.Respuestas:
Necesitas escapar del
|
. Lo siguiente debería hacer el trabajo.grep "gene\|exon" AT5G60410.gff
fuente
De forma predeterminada, grep trata los caracteres especiales típicos como caracteres normales a menos que sean de escape. Entonces podrías usar lo siguiente:
grep 'gene\|exon' AT5G60410.gff
Sin embargo, puede cambiar su modo utilizando los siguientes formularios para hacer lo que espera:
egrep 'gene|exon' AT5G60410.gff grep -E 'gene|exon' AT5G60410.gff
fuente
Esta es una forma diferente de hacer grepping para algunas opciones:
grep -e gene -e exon AT5G60410.gff
el
-e
conmutador especifica diferentes patrones para que coincidan.fuente
time
comando para averiguarlo.Esto funcionará:
grep "gene\|exon" AT5G60410.gff
fuente
Encontré esta pregunta mientras buscaba en Google un problema particular que estaba teniendo que involucraba un comando canalizado a un
grep
comando que usaba el operador de alternancia en una expresión regular, así que pensé en contribuir con mi respuesta más especializada.El error que enfrenté resultó ser con el operador de tubería anterior (es decir
|
) y no con el operador de alternancia (es decir,|
idéntico al operador de tubería) en el grep regex en absoluto. La respuesta para mí fue escapar correctamente y citar los caracteres especiales de shell necesarios , como & antes de asumir que el problema era con mi grep regex que involucraba al operador de alternancia.Por ejemplo, el comando que ejecuté en mi máquina local fue:
get http://localhost/foobar-& | grep "fizz\|buzz"
Este comando resultó en el siguiente error:
-bash: syntax error near unexpected token `|'
Este error se corrigió cambiando mi comando a:
get "http://localhost/foobar-&" | grep "fizz\|buzz"
Al escapar del
&
carácter con comillas dobles, pude resolver mi problema. La respuesta no tiene nada que ver con la operación de alternancia.fuente