首页 >> 学习 >> Linux常用命令 >> grep
grep命令

本节重要性:★★★★★    本节难度:★★★★☆

grep命令作用比较单一,用法也不复杂,但使用的场景非常多,如能灵活使用该命令,可以完成很多只有编程才能完成的任务。

命令用途

显示匹配某一模式的行

命令格式

grep [option] pattern [file]

常用选项

-E	用扩展的正则表达式解释模式pattern(相当于egrep命令)
-i	忽略大小写
-v	反向匹配(匹配不包含模式pattern的行)
-c	输出匹配的行的数目,而不是输出匹配的行本身
-A n	输出匹配的行及该行后面n行
-B n	输出匹配的行及该行前面n行
-C n	输出匹配的行及该行前后各n行

常见用法

1. 查找一个文件中包含某个模式的行:

[peter@ibi98 prac]$ ll
总用量 8
-rw-rw-r-- 1 peter peter 6453  3月 12 16:07 at_hap3_cds.fa
[peter@ibi98 prac]$ head at_hap3_cds.fa
>AT5G47670
ATGGAACGTGGAGGCTTCCATGGCTACCGCAAGCTGTCCGTGAACAACACCACTCCTTCTCCACCAGGAT
TAGCAGCGAATTTTCTGATGGCAGAGGGCAGTATGCGTCCTCCAGAATTCAACCAGCCTAACAAAACCAG
TAATGGTGGTGAGGAGGAGTGCACGGTGAGGGAGCAAGACAGGTTCATGCCTATTGCCAACGTGATACGG
ATCATGCGGAGGATCTTACCTGCTCACGCCAAGATCTCAGATGACTCCAAGGAGACGATCCAAGAGTGTG
TTTCGGAGTACATCAGCTTCATAACAGGGGAGGCTAATGAGCGGTGCCAGCGGGAACAGCGCAAGACCAT
CACTGCTGAGGACGTCTTGTGGGCAATGAGCAAGCTCGGTTTTGATGACTACATCGAACCCCTCACGTTG
TACCTCCACCGCTACAGAGAGTTGGAAGGTGAAAGAGGGGTTAGCTGCAGTGCTGGGTCCGTTAGTATGA
CCAACGGCTTGGTGGTCAAGAGGCCTAATGGGACCATGACCGAGTATGGAGCCTACGGGCCTGTGCCAGG
GATTCACATGGCGCAGTACCATTATCGTCATCAGAACGGGTTTGTTTTCAGTGGTAACGAACCTAATTCT
[peter@ibi98 prac]$ grep '>' at_hap3_cds.fa
>AT5G47670
>AT1G09030
>AT1G21970
>AT2G13570
>AT2G37060
>AT2G38880
>AT2G47810
>AT3G53340
>AT4G14540
>AT5G47640
>CrHAP3

由于“>”是重定向符号,因此搜索该符号时需要在两边添加引号(这里单引号和双引号都可以,后面我们将学习这两种引号的区别),否则系统会将“>”识别成重定向符号,导致命令缺少输入而停留在等待输入的状态。

2. 查找一个命令执行结果中包含某个模式的行,如查找ps命令(查看进程信息的命令)结果中某个进程的信息:

[peter@ibi98 prac]$ ps -ef |grep httpd
apache   14216 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14217 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14218 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14219 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14220 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14221 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14222 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
apache   14223 28046  0 03:18 ?        00:00:00 /usr/sbin/httpd -k start
peter    24327 23595  0 16:16 pts/19   00:00:00 grep --color=auto httpd
root     28046     1  0  2016 ?        00:05:14 /usr/sbin/httpd -k start

3. 去掉文件中包含某个模式的行:

[peter@ibi98 prac]$ cat at_LEC1_CDS.fa
>AT1G21970 At_NM_102046
ATGGAACGTGGAGCTCCCTTCTCTCACTATCAGCTACCAAAATCCATCTCTGAATTGAACTTGGACCAGC
ACAGCAACAACCCAACCCCAATGACCAGCTCAGTCGTAGTAGCCGGCGCCGGTGACAAGAACAATGGTAT
CGTGGTCCAGCAGCAACCACCATGTGTGGCTCGTGAGCAAGACCAATACATGCCAATCGCAAACGTCATA
AGAATCATGCGTAAAACCTTACCGTCTCACGCCAAAATCTCTGACGACGCCAAAGAAACGATTCAAGAAT
GTGTCTCCGAGTACATCAGCTTCGTGACCGGTGAAGCCAACGAGCGTTGCCAACGTGAGCAACGTAAGAC
CATAACTGCTGAAGATATCCTTTGGGCTATGAGCAAGCTTGGGTTCGATAACTACGTGGACCCCCTCACC
GTGTTCATTAACCGGTACCGTGAGATAGAGACCGATCGTGGTTCTGCACTTAGAGGTGAGCCACCGTCGT
TGAGACAAACCTATGGAGGAAATGGTATTGGGTTTCACGGCCCATCTCATGGCCTACCTCCTCCGGGTCC
TTATGGTTATGGTATGTTGGACCAATCCATGGTTATGGGAGGTGGTCGGTACTACCAAAACGGGTCGTCG
GGTCAAGATGAATCCAGTGTTGGTGGTGGCTCTTCGTCTTCCATTAACGGAATGCCGGCTTTTGACCATT
ATGGTCAGTATAAGTGA
[peter@ibi98 prac]$ grep -v '>' at_LEC1_CDS.fa
ATGGAACGTGGAGCTCCCTTCTCTCACTATCAGCTACCAAAATCCATCTCTGAATTGAACTTGGACCAGC
ACAGCAACAACCCAACCCCAATGACCAGCTCAGTCGTAGTAGCCGGCGCCGGTGACAAGAACAATGGTAT
CGTGGTCCAGCAGCAACCACCATGTGTGGCTCGTGAGCAAGACCAATACATGCCAATCGCAAACGTCATA
AGAATCATGCGTAAAACCTTACCGTCTCACGCCAAAATCTCTGACGACGCCAAAGAAACGATTCAAGAAT
GTGTCTCCGAGTACATCAGCTTCGTGACCGGTGAAGCCAACGAGCGTTGCCAACGTGAGCAACGTAAGAC
CATAACTGCTGAAGATATCCTTTGGGCTATGAGCAAGCTTGGGTTCGATAACTACGTGGACCCCCTCACC
GTGTTCATTAACCGGTACCGTGAGATAGAGACCGATCGTGGTTCTGCACTTAGAGGTGAGCCACCGTCGT
TGAGACAAACCTATGGAGGAAATGGTATTGGGTTTCACGGCCCATCTCATGGCCTACCTCCTCCGGGTCC
TTATGGTTATGGTATGTTGGACCAATCCATGGTTATGGGAGGTGGTCGGTACTACCAAAACGGGTCGTCG
GGTCAAGATGAATCCAGTGTTGGTGGTGGCTCTTCGTCTTCCATTAACGGAATGCCGGCTTTTGACCATT
ATGGTCAGTATAAGTGA

这里,grep命令加了-v选项,会输出不包含“>”的行,实际上就是相当于把包含“>”的行过滤掉了。

4. 统计包含某个模式的行的数量:

[peter@ibi98 prac]$ grep -c '>' at_hap3_cds.fa
11

因为Fasta格式的序列数据每个序列均以“>”开头,所以“>”的个数就是序列的个数,因此可以用该命令统计一个Fasta格式文件中的序列的数目。

上面只是给出了grep命令的几种常见用法,该命令还有很多其他用法,以后的学习中还会经常用到该命令,希望能熟练掌握该命令。

<<上一节  下一节>>