grep是一个文本搜索工具,可以通过正则表达式搜索文本,并把匹配的行打印出来。我们直接通过实例来看看grep的用法。
aa是一个文件,包括4列,基因名,基因所在染色体,基因起始位置和基因终止位置。
cat aa
DDX11L1 chr1 11869 14409
WASH7P chr1 14404 29570
MIR1302-2HG chr1 29554 31109
FAM138A chr1 34554 36081
OR4G4P chr1 52473 53312
OR4G11P chr1 57598 64116
OR4F5 chr1 65419 71585
RP11-34P13.7 chr1 89295 133723
RP11-34P13.8 chr1 89551 91105
CICP27 chr1 131025 134836
AL627309.1 chr1 134901 139379
RP11-34P13.15 chr1 135141 135895
RP11-34P13.16 chr1 137682 137965
RP11-34P13.14 chr1 139790 140339
RP11-34P13.13 chr1 141474 173862
grep "OR4F5" aa ## 显示aa中包含OR4F5的行
OR4F5 chr1 65419 71585
grep "or4f5" aa ## 显示aa中包含or4f5的行(大小写敏感,aa中没有or4f5,打印为空)
grep -i "or4f5" aa ## 显示aa中包含or4f5的行(忽略大小写)
OR4F5 chr1 65419 71585
grep -n "OR4F5" aa ## 显示aa中包含OR4F5的行,并打印行号
7:OR4F5 chr1 65419 71585
grep -v "OR4F5" aa ## 显示aa中不包含OR4F5的行
grep -A 2 "OR4F5" aa ## 显示aa中包含OR4F5的行以及后2行
OR4F5 chr1 65419 71585
RP11-34P13.7 chr1 89295 133723
RP11-34P13.8 chr1 89551 91105
grep -B 2 "OR4F5" aa ## 显示aa中包含OR4F5的行以及前2行
OR4G4P chr1 52473 53312
OR4G11P chr1 57598 64116
OR4F5 chr1 65419 71585
grep -C 2 "OR4F5" aa ## 显示aa中包含OR4F5的行以及前后2行
OR4G4P chr1 52473 53312
OR4G11P chr1 57598 64116
OR4F5 chr1 65419 71585
RP11-34P13.7 chr1 89295 133723
RP11-34P13.8 chr1 89551 91105
grep -c "OR4F5" aa ## 在aa中包含OR4F5的行数
1
grep -l "OR4F5" aa ## 打印出满足要求的文件名(-l则不显示文件名),适用于搜索多个文件时使用
aa
grep -e "OR4" -e "RP11" aa ## 多模式匹配
OR4G4P chr1 52473 53312
OR4G11P chr1 57598 64116
OR4F5 chr1 65419 71585
RP11-34P13.7 chr1 89295 133723
RP11-34P13.8 chr1 89551 91105
RP11-34P13.15 chr1 135141 135895
RP11-34P13.16 chr1 137682 137965
RP11-34P13.14 chr1 139790 140339
RP11-34P13.13 chr1 141474 173862
grep -H -e "OR4" aa ## 每一行都显示文件名(-h则不显示文件名)
aa:OR4G4P chr1 52473 53312
aa:OR4G11P chr1 57598 64116
aa:OR4F5 chr1 65419 71585
grep -o -e "OR4" aa ## 只输出匹配的部分
OR4
OR4
OR4
grep -w -e "OR4" aa ## 只输出匹配OR4的单词,因此输出为空(没有OR4这个单词,只有包含OR4的词)
grep "text" ./ -r ## 递归搜索当前文件夹,并匹配text
grep "main()" ./ -r --include *.{php,html} ## 只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" ./ -r --exclude "README" ## 在搜索结果中排除所有README文件
grep "main()" ./ -r --exclude-from filelist ## 在搜索结果中排除filelist文件列表里的文件
当然,grep的强大在于它可以使用正则表达式,将在下面一篇文章中专门来讲。