【Shell】三剑客之grep

【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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值