sed 学习记录

https://www.gnu.org/software/sed/manual/sed.html

sed  
	 /i   											#忽略大小写  
	 /d  											#delete  
	 /p   											#打印
sed -e 												#将多个表达式连接
	-i 												#写入文件
	-n  											#输出经过处理的行
	
sed '5,$d' tom.txt  								#删除5行至末尾
sed '1,4p' -n /etc/passwd    						#打印1到4行
#s 替换
sed 's/([0-9]*\s[0-9]*)/ton/'						#匹配(123 123) 括号及括号里的数字,中间有一个空格 
sed '87,93s/tom/ton/'     							#83到97行,tom替换成ton
sed '/0.88/,/0.99/s/tom/ton/'    					#从遇到0.88的行开始到有0.99的行结束  将tom换成ton
sed  's/^\s*//'										#删除行首空格 

# 添加行
sed -n -e '/\<tom\>/p' /etc/passwd     				#具体搜索单词并删除
sed '1a tom\nton'   								#在第一行后添加多行
sed '/Port 22/a\Port 1111' /etc/fiel				#在port 22下面插入一行
sed 's/\#Port 22/Port 1111/' /etc/file				#替换

	-i	行前追加
	-a	行后追加
	-c	替换匹配的当前行
sed -i '/^ftp/i  hello wrold' ./text.txt 			#匹配以text.txt文件中以ftp开头的行,匹配行前追加
	-r 每次匹配都追加
	-R 单行追加
sed -i '/^ftp/,19r  ./line' ./text.txt				#匹配以text.txt文件中以ftp开头的行,将line文件内容追加至匹配行至19行的每个行后

多行操作

通过使用下面的命令,sed可以对多行​​使用正则表达式,即在多行存储在模式空间中使用正则表达式。
这里sed维护两个数据缓冲区:活动模式空间和辅助保持空间。两者最初都是空的。

-l 打印当前模式空间的内容,方便debug

p 打印所有的
P 打印至\n

n 分行读
N 两行看成一行

d 分行删除重读
D 迭代式删除,删除到\n

[tom@paly ~]$sed  -n 'N;N;P' disp.txt       		
line 1												#P打印line 1\nline 2\nline 3$中的第line 1
line 4												#P打印line 4\nline 5\nline 6$中的第line 4
[tom@paly ~]$sed  -n 'N;N;p' disp.txt  
line 1
line 2
line 3
line 4
line 5
line 6				#p打印到line 4\nline 5\nline 6$后,下一条NNP命令只走到了第一个N,即第一个N,读到文件尾,第2个N命令不成功,后面p命令亦不执行

[tom@paly ~]$sed  -n 'N;$!N;p' disp.txt   
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8				#第二个N加个$!不处理尾部,跳过第二个N,p会执行打印line 7\nline 8$
[tom@paly ~]$cat disp.txt 
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
[tom@paly ~]$sed  -n 'N;l;N;l' disp.txt     
line 1\nline 2$
line 1\nline 2\nline 3$
line 4\nline 5$
line 4\nline 5\nline 6$
line 7\nline 8$

[tom@paly ~]$sed  -n 'n;l;n;l' disp.txt 
line 2$
line 3$
line 5$
line 6$
line 8$

[tom@paly ~]$sed  -n '1!N;l;$!N;l' disp.txt  #限制第一个N处理非第一行,第二个N处理非尾行
line 1$
line 1\nline 2$
line 3\nline 4$
line 3\nline 4\nline 5$
line 6\nline 7$
line 6\nline 7\nline 8$

[tom@paly ~]$sed  -n 'N;l;N;l;D;l' disp.txt 
line 1\nline 2$
line 1\nline 2\nline 3$				#迭代式删除,只删除到第一个\n
line 2\nline 3\nline 4$
line 2\nline 3\nline 4\nline 5$
line 3\nline 4\nline 5\nline 6$
line 3\nline 4\nline 5\nline 6\nline 7$
line 4\nline 5\nline 6\nline 7\nline 8$

[tom@paly ~]$sed  -n 'N;l;N;l;d;l' disp.txt  
line 1\nline 2$
line 1\nline 2\nline 3$
line 4\nline 5$						#整个删除再读新的
line 4\nline 5\nline 6$
line 7\nline 8$

[tom@paly ~]$sed  '$!N;/\n.*tom/!P;D' disp.txt   	#删除匹配前一行
line 1
line 2
line 3
tom line 5
line 6
line 7
line 8
[tom@paly ~]$sed  '$!N;l;/\n.*tom/!P;l;D' disp.txt   
line 1\nline 2$
line 1
line 1\nline 2$
line 2\nline 3$
line 2
line 2\nline 3$
line 3\nline 4$
line 3
line 3\nline 4$
line 4\ntom line 5$
line 4\ntom line 5$
tom line 5\nline 6$
tom line 5
tom line 5\nline 6$
line 6\nline 7$
line 6
line 6\nline 7$
line 7\nline 8$
line 7
line 7\nline 8$
line 8$
line 8
line 8$
[tom@paly ~]$

脚本

sed -f  rule.script  < need_deal_file   			#同时可以将sed命令写成脚本 

#脚本文件可以写成如下
#!/bin/sed -f 
s/root/tom/
#然后直接运行脚本:change.sh /etc/passwd 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值