使用
grep
、sed
、awk
等命令,要注意正则表达式的灵活使用
- 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
进行更准确的匹配。
网友评论