【grep】
global regular expression print
grep是文本搜索工具,根据用户指定的pattern(由文本字符及正则表达式元字符编写的过滤条件)对目标文本逐行进行匹配检查并打印出符合条件的行
grep有三个版本:grep,egrep和fgrep. egrep是扩展的grep,等同于grep -E,fgrep是快速grep,不支持正则表达式
不同版本的grep对正则表达式的支持有所不同
grep:默认是使用基本正则表达式(BRE)
egrep:支持扩展的正则表达式(ERE)
fgrep:不支持正则表达式(但搜索速度快)
命令格式:
grep '表达式' 文件名列表
命令 | grep '表达式'
grep 命令是一个强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
grep常用参数:
-i //不区分大小写
-r //递归搜索
-l //只显示满足条件的文件的名字
-n //显示匹配行在文件中的行号
-v //过滤掉满足匹配条件的行
-A //符合条件的后面的行数(after)
-B //符合条件的前面的行数( before )
-C //符合条件的前后行数(after+before)
-c //统计符合条件的列数
--color //以颜色方式显示匹配的字符串
-E //将样式为延伸的正则表达式来使用
PS: grep -E =egrep
下面来看一个例子,过滤掉 test.txt 中注释行和空行
其中 ^$ 意思就是行首之后就是行尾,中间什么也没有,所以代表空行
root@bras-01:/tmp# cat -n test.txt
1 # this is a test
2 # hello world
3
4 # string
5 aabbcc115599
6 ccddmm123456789
7 hashakei#haha
8
9 # URL
10 www.12356abc.com
11 www.baidu.com
12 www.12306.com
13
14 # ip address
15 192.168.1.1
16 192.168.1.2
17 192.168.1.255
18 192.168.1.254
19
root@bras-01:/tmp# cat test.txt | grep -v ^#
aabbcc115599
ccddmm123456789
hashakei#haha
www.12356abc.com
www.baidu.com
www.12306.com
192.168.1.1
192.168.1.2
192.168.1.255
192.168.1.254
root@bras-01:/tmp# cat test.txt | grep -v ^# | grep -v ^$
aabbcc115599
ccddmm123456789
hashakei#haha
www.12356abc.com
www.baidu.com
www.12306.com
192.168.1.1
192.168.1.2
192.168.1.255
192.168.1.254
root@bras-01:/tmp# cat -n test.txt
1 # this is a test
2 # hello world
3
4 # string
5 aabbcc115599
6 ccddmm123456789
7 hashakei#haha
8
9 # URL
10 www.12356abc.com
11 www.baidu.com
12 www.12306.com
13
14 # ip address
15 192.168.1.1
16 192.168.1.2
17 192.168.1.255
18 192.168.1.254
19
root@bras-01:/tmp#找出以 a 开头的行并打印出其行数以及后两行内容
root@bras-01:/tmp# cat test.txt | grep -n ^a -A 1
5:aabbcc115599
6-ccddmm123456789
root@bras-01:/tmp#找出以 a 开头的行并打印出其行数以及后一行内容
root@bras-01:/tmp# cat test.txt | grep -n ^a -A 2
5:aabbcc115599
6-ccddmm123456789
7-hashakei#haha
root@bras-01:/tmp#找出以 a 开头的行并打印出其行数以及前一行内容
root@bras-01:/tmp# cat test.txt | grep -n ^a -B 1
4-# string
5:aabbcc115599
root@bras-01:/tmp#找出以 a 开头的行并打印出其行数以及前三行内容
root@bras-01:/tmp# cat test.txt | grep -n ^a -B 3
2-# hello world
3-
4-# string
5:aabbcc115599
root@bras-01:/tmp#找出以 a 开头的行并打印出其行数以及其前后一行内容
root@bras-01:/tmp# cat test.txt | grep -n ^a -C 1
4-# string
5:aabbcc115599
6-ccddmm123456789
root@bras-01:/tmp#找出以 a 开头的行并打印出其行数以及其前后两行内容
root@bras-01:/tmp# cat test.txt | grep -n ^a -C 2
3-
4-# string
5:aabbcc115599
6-ccddmm123456789
7-hashakei#haha