A seguir está um exemplo de um arquivo grande denominado 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
Estou tendo problemas para extrair linhas específicas usando grep. Eu queria extrair todas as linhas que são do tipo "gene" ou tipo "exon", especificadas na terceira coluna. Fiquei surpreso quando isso não funcionou:
grep 'gene|exon' AT5G60410.gff
Nenhum resultado é retornado. Onde eu errei?
egrep
vez disso, tente .Respostas:
Você precisa escapar do
|
. O seguinte deve fazer o trabalho.fonte
Por padrão, grep trata os caracteres especiais típicos como caracteres normais, a menos que sejam escapados. Então, você pode usar o seguinte:
No entanto, você pode alterar seu modo usando os seguintes formulários para fazer o que espera:
fonte
Esta é uma maneira diferente de usar o grep para algumas opções:
a
-e
opção especifica diferentes padrões para combinar.fonte
time
comando para descobrir.Isso vai funcionar:
fonte
Eu encontrei esta pergunta enquanto pesquisava no Google por um problema específico que estava tendo envolvendo um comando canalizado para um
grep
comando que usava o operador de alternância em uma regex, então pensei que poderia contribuir com minha resposta mais especializada.O erro que enfrentei acabou sendo com o operador de pipe anterior (ou seja,
|
) e não com o operador de alternação (ou seja,|
idêntico ao operador de pipe) no grep regex. A resposta para mim foi escapar e citar adequadamente como caracteres de shell especiais necessários , como &, antes de assumir que o problema era com meu regex grep que envolvia o operador de alternância.Por exemplo, o comando que executei em minha máquina local foi:
Este comando resultou no seguinte erro:
Este erro foi corrigido alterando meu comando para:
Ao escapar do
&
caractere com aspas duplas, consegui resolver meu problema. A resposta não teve nada a ver com a operação de alternância.fonte