使用"|"进行grepping 替代运营商

Mat*_*eck 79 regex linux grep

以下是名为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
Run Code Online (Sandbox Code Playgroud)

我在使用grep从中提取特定行时遇到一些麻烦.我想提取所有类型为"gene"或类型为"exon"的行,在第三列中指定.当这不起作用时我很惊讶:

grep 'gene|exon' AT5G60410.gff
Run Code Online (Sandbox Code Playgroud)

没有返回结果.我哪里出错了?

Jef*_*ter 121

你需要逃避|.以下应该做的工作.

grep "gene\|exon" AT5G60410.gff
Run Code Online (Sandbox Code Playgroud)


a'r*_*a'r 44

默认情况下,grep会将典型的特殊字符视为普通字符,除非它们被转义.所以你可以使用以下内容:

grep 'gene\|exon' AT5G60410.gff
Run Code Online (Sandbox Code Playgroud)

但是,您可以使用以下表单来更改其模式以执行您期望的操作:

egrep 'gene|exon' AT5G60410.gff
grep -E 'gene|exon' AT5G60410.gff
Run Code Online (Sandbox Code Playgroud)


Nat*_*man 25

这是一种不同的选择方式:

grep -e gene -e exon AT5G60410.gff
Run Code Online (Sandbox Code Playgroud)

-e开关指定不同的图案相匹配.

  • 不错的选择,感谢您向我展示! (3认同)