Ниже приведен пример большого файла с именем 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
У меня возникли проблемы с извлечением определенных строк из этого с помощью grep. Я хотел извлечь все строки типа «ген» или типа «экзон», указанные в третьем столбце. Я был удивлен, когда это не сработало:
grep 'gene|exon' AT5G60410.gff
Результаты не возвращаются. Где я ошибся?
egrep
вместо этого.Ответы:
Вам нужно избежать
|
. Следующее должно работать.grep "gene\|exon" AT5G60410.gff
источник
По умолчанию grep обрабатывает типичные специальные символы как обычные символы, если они не экранированы. Итак, вы можете использовать следующее:
grep 'gene\|exon' AT5G60410.gff
Однако вы можете изменить его режим, используя следующие формы, чтобы сделать то, что вы ожидаете:
egrep 'gene|exon' AT5G60410.gff grep -E 'gene|exon' AT5G60410.gff
источник
Это другой способ поиска нескольких вариантов:
grep -e gene -e exon AT5G60410.gff
в
-e
ключе определяет различные модели , чтобы соответствовать.источник
time
команду, чтобы узнать.Это будет работать:
grep "gene\|exon" AT5G60410.gff
источник
Я нашел этот вопрос, когда искал в Google конкретную проблему, с которой я столкнулся, используя конвейерную команду для
grep
команды, которая использовала оператор чередования в регулярном выражении, поэтому я подумал, что внесу свой более специализированный ответ.Ошибка, с которой я столкнулся, оказалась связана с предыдущим оператором канала (т.е.
|
), а не с оператором чередования (т.е.|
идентичным оператору канала) в регулярном выражении grep. Для меня ответ заключался в том, чтобы правильно экранировать и цитировать при необходимости специальные символы оболочки, такие как &, прежде чем предположить, что проблема связана с моим регулярным выражением grep, в котором задействован оператор чередования.Например, на своем локальном компьютере я выполнил следующую команду:
get http://localhost/foobar-& | grep "fizz\|buzz"
Эта команда привела к следующей ошибке:
-bash: syntax error near unexpected token `|'
Эта ошибка была исправлена путем изменения моей команды на:
get "http://localhost/foobar-&" | grep "fizz\|buzz"
Экранируя
&
символ двойными кавычками, я смог решить свою проблему. Ответ вообще не имел ничего общего с операцией чередования.источник