regulares regular probar online expressions expresiones regex linux grep

regular - regex online c#



grepping usando el operador alternativo “|” (5)

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

Estoy teniendo algunos 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?


De forma predeterminada, grep trata los caracteres especiales típicos como caracteres normales a menos que se escapen. Así que 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


Encontré esta pregunta mientras buscaba en Google un problema en particular que involucraba un comando canalizado a un comando grep que usaba el operador de alternancia en una expresión regular, así que pensé que contribuiría con mi respuesta más especializada.

El error al que me 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 regex grep en absoluto. La respuesta para mí fue escapar adecuadamente y citar según sea necesario los caracteres especiales de la cáscara, como & antes de suponer que el problema fue con mi greg regex que involucró al operador de alternancia.

Por ejemplo, el comando que ejecuté en mi máquina local era:

get http://localhost/foobar-& | grep "fizz/|buzz"

Este comando dio como resultado 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 tenía nada que ver con la operación de alternancia en absoluto.


Esta es una forma diferente de grepping para algunas opciones:

grep -e gene -e exon AT5G60410.gff

el interruptor -e especifica diferentes patrones para que coincidan.


Esto funcionará:

grep "gene/|exon" AT5G60410.gff


Necesitas escapar de la | . Lo siguiente debe hacer el trabajo.

grep "gene/|exon" AT5G60410.gff