文本处理三剑客grep、sed、awk

grep

grep----过滤、筛选

grep “字符串”
grep -v “字符串”
grep ^“字符串” 以…开头
grep “字符串”$
grep ^$ 空行
grep -i 不区分大小写
grep -o 只显示匹配的部分

sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用
sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容发送往屏幕。然后读入下行,执行下一个循环。
如果没有诸如“D”的特殊命令,那会在两个循环之间清空模式空间,但不能清除保留空间。这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出或-i。
选项
-n 不打印模式空间
-e 执行脚本、表达式来处理
-f 执行动作从文件读取执行
-i 修改原文件
-r 使用扩展正则表达式

命令
s/regexp/replace/ 替换字符串
p 打印当前模式空间
P(大写) 打印模式空间的第一行
d 删除模式空间,开始下一个循环
D 删除模式空间的第一行,开始下一个循环
= 打印当前行号
a \text 当前行追加文本
i \text 当前行上面插入文本
c \text 所选行替换新文本
q 立即退出sed脚本
r 追加文本来自文件
h H 复制/追加模式空间到保持空间
g G 复制/追加保持空间到模式空间
x 交换模式空间和保持空间内容
l 打印模式空间的行,并显示控制字符$
n N 读取/追加下一行输入到模式空间
w filename 写入到当前模式空间到文件
! 取反、否定
& 引用已匹配字符串

地址
first~step 从first开始,每step步输出值
$ 匹配最后一行
/regexp/ 正则表达式匹配行
number 只匹配指定行
addr1,addr2 开始匹配addr1行开始,直接addr2行结束
addr1,+N 从addr1行开始,向后的N行
addr1,~N 从addr1行开始,到N行结束

案例1:

[root@rhel8 ~]# cat /tmp/services 
nimgtw 		48003/udp 		# Nimbus Gateway
3gpp-cbsp 		48049/tcp 		# 3GPP Cell Broadcast Service Protocol
isnetserv 		48128/tcp 		# Image Systems Network Services
isnetserv 		48128/udp 		# Image Systems Network Services
blp5 			48129/tcp 		# Bloomberg locator
blp5 			48129/udp 		# Bloomberg locator
com-bardac-dw 	48556/tcp 		# com-bardac-dw
com-bardac-dw 	48556/udp 		# com-bardac-dw
iqobject 		48619/tcp 		# iqobject
iqobject 		48619/udp 		# iqobject
匹配打印(p)
(1)打印匹配blp5开头的行
[root@rhel8 ~]# 
[root@rhel8 ~]# cat /tmp/services | sed -n '/^blp5/p'
blp5 		48129/tcp 	# Bloomberg locator
blp5 		48129/udp 	# Bloomberg locator

(2)打印第一行
[root@rhel8 ~]# cat /tmp/services | sed -n '1p'
nimgtw 		48003/udp 	# Nimbus Gateway

(3)打印第一行至第三行
[root@rhel8 ~]# cat /tmp/services | sed -n '1,3p'
nimgtw 		48003/udp 	# Nimbus Gateway
3gpp-cbsp 		48049/tcp 	# 3GPP Cell Broadcast Service Protocol
isnetserv 		48128/tcp 	# Image Systems Network Services

(4)打印奇数行
[root@rhel8 ~]# seq 10 | sed -n '1~2p'
1
3
5
7
9

(5)打印匹配行及后一行
[root@rhel8 ~]# cat /tmp/services | sed -n '/blp5/,+1p'
blp5 		48129/tcp 	# Bloomberg locator
blp5 		48129/udp 	# Bloomberg locator

(6)打印最后一行
[root@rhel8 ~]# cat /tmp/services | sed -n '$p'
iqobject 	48619/udp 	# iqobject

(7)不打印最后一行
[root@rhel8 ~]# cat /tmp/services | sed -n '$!p'
nimgtw 		48003/udp 	# Nimbus Gateway
3gpp-cbsp 		48049/tcp 	# 3GPP Cell Broadcast Service Protocol
isnetserv 		48128/tcp 	# Image Systems Network Services
isnetserv 		48128/udp 	# Image Systems Network Services
blp5 			48129/tcp 	# Bloomberg locator
blp5 			48129/udp 	# Bloomberg locator
com-bardac-dw 	48556/tcp 	# com-bardac-dw
com-bardac-dw 	48556/udp 	# com-bardac-dw
iqobject 		48619/tcp 	# iqobject

(8)匹配范围
[root@rhel8 ~]# cat /tmp/services | sed -n '/^blp5/,/^com/p'
blp5 		48129/tcp 	# Bloomberg locator
blp5 		48129/udp 	# Bloomberg locator
com-bardac-dw 	48556/tcp 	# com-bardac-dw

匹配blp5所在行到最后一行
[root@rhel8 ~]# cat /tmp/services | sed -n '/blp5/,$p'
blp5 			48129/tcp 	# Bloomberg locator
blp5 			48129/udp 	# Bloomberg locator
com-bardac-dw 	48556/tcp 	# com-bardac-dw
com-bardac-dw 	48556/udp 	# com-bardac-dw
iqobject 		48619/tcp 	# iqobject
iqobject 		48619/udp 	# iqobject

(9)引用系统变量,用引号
[root@rhel8 ~]# cat /tmp/services |sed -n ''$a',3p'
nimgtw 		48003/udp 	# Nimbus Gateway
3gpp-cbsp 		48049/tcp 	# 3GPP Cell Broadcast Service Protocol
isnetserv 		48128/tcp 	# Image Systems Network Services

或者
[root@rhel8 ~]# cat /tmp/services |sed -n "$a,3p"

案例2:删除匹配

[root@rhel8 ~]# cat /tmp/services | sed '/blp5/d'
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值