三剑客 | grep

作者: shwzhao | 来源:发表于2021-08-29 20:00 被阅读0次

使用 grepsedawk 等命令,要注意正则表达式的灵活使用

  • Global Search Regular Expression and Print out the line (全局搜索正则表达式并打印文本行)

-A: 除了显示符合范本样式的那一行之外,并显示该行之后(After)的内容
-B: 除了显示符合样式的那一行之外,并显示该行之前(Before)的内容
-E: 支持扩展正则表达式
-F: 不支持正则表达式,将模式按字面意义匹配
-f: 匹配两个文件
-w: 精确匹配
-v: 排除/只显示不匹配
-n: 显示行号
-l: 只列出含有匹配的文本行的文件的文件名,不显示匹配内容
-r: 递归搜索,不仅搜索当前目录,还要搜索各级子目录

有这么一个文件genome.fa

$ cat genome.fa
>chr1
ATTCATAGCCAATTTAGCC
>chr2
GATCAGCAGTTTATT
>chr3
GGCAAGTTACGGC
>chr10
TTTCAGCCAG
>chr11
CCATAA
$ echo -e "chr1\nchr2\nchr3" | grep -wf - genome.fa 
>chr1
>chr2
>chr3

不加 -w 会匹配上 chr10 和 chr11,为什么不受【>】的影响我也不知道,特殊符号里只有下划线【_】保守;
-f是比较两个文件,- 把标准输出作为了一个文件,活用 - 可以少很多中间文件;
也可以写成 grep -wE "chr1|chr2|chr3" genome.fa,在有-E参数的时候 | 表示【或】。

$ grep -E "chr1|chr2" -A 1  genome.fa
>chr1
ATTCATAGCCAATTTAGCC
>chr2
GATCAGCAGTTTATT
--
>chr10
TTTCAGCCAG
>chr11
CCATAA

chr1 和 chr2 之间没有“--” 是因为他俩本来就在一块,加上 | grep -v "\--" 可以去掉,\ 可以使 -- 成为它本来的意思;
-A 1 输出了匹配行的下一行。

$ grep "chr1." genome.fa
>chr10
>chr11
$ grep -F "chr1." genome.fa
$

-F会忽略正则表达式。在很多基因名中都有【.】之类的字符,平时搜索基因的时候,要注意加上 -F 进行更准确的匹配。

相关文章

网友评论

    本文标题:三剑客 | grep

    本文链接:https://www.haomeiwen.com/subject/mdyoiktx.html