六周第二次课 2017.11.21 sed

sed

sed对比grep有一个优势,就是替换。

匹配指定的行

将test.txt里的含有root字符的行过滤出来。
sed同时也支持grep里的. * +等符号,不过需要加脱义符,不想加脱义符的话可以在-n后面加一个r。


打印匹配的行

将test.txt的第二行打印出来。
将test.txt的2-5行打印出来。
将test.txt的25行以后的内容打印出来。
将test.txt的全部内容打印出来。
将test.txt的第一行列出,并且列出含有bus的行。(-e可以然后你在一条命令里做多个操作)
将test.txt里含有bus字符(包括大写)的行列出来。(在p前面加大写的i,意思是不区分大小写)

删除指定的行

删除test.txt文件的前30行,(d并不是真正的删除,只是显示剩下的行。)
真正删除test.txt文件的前25行,(-i真正的删除文件内容)
真正删除test.txt文件里含有user2的行

删除以某标记开始,某标记截止的多行内容:

sed '/<tag_begin>/, /<tag_end>/d'  filename

删除匹配k的行及其后2行
[root@centos79 test]# cat a.txt
3 4 5
d g 3
s g 8
k s g
2 5 d
s c w
a r t
e 4 s
[root@centos79 test]# sed '/k/,+2d' a.txt
3 4 5
d g 3
s g 8
a r t
e 4 s

删除以d开头的行及其后3行
[root@centos79 test]# cat a.txt
3 4 5
d g 3
s g 8
k s g
2 5 d
s c w
a r t
e 4 s
[root@centos79 test]# sed '/^d/,+3d' a.txt
3 4 5
s c w
a r t
e 4 s

替换

替换1-10行中的root为toor。(和vim里的替换一个写法)
替换1-10行中的ro、roo、rooo..为r。(字符名是可以使用正则表达式的)
将test.txt的前十行中以:分隔的行,首段和尾段位置调换位置。
如果要替换的字符里有特殊符号需要使用脱义符,或者使用其他的分隔符(使用@或者#)。

删除该文件前十行中的字母。(第二个斜杠后面留空代表删除)
给该文件的前十行行首添加aaa:。(小括号括起来的内容可以用1或者&表示)

插入内容

#如果知道行号可以用下面的方法
sed -i '88 r b.file' a.file #在a.txt的第88行插入文件b.txt
awk '1;NR==88{system("cat b.file")}' a.file > a.file

#如果不知道行号,可以用正則匹配
sed -i '/regex/ r b.txt' a.txt # regex是正则表达式
awk '/target/{system("cat b.file")}' a.file > c.file

修改指定关键词的行

sed -i "/关键词1\|关键词2\|关键词3/s/^\(.*\)$/#\1/g" 文件名

这个\1表示前面那个括号里的内容,这条的意思就是把符合关键词的一整行前面加个井号

如果有其他的修改需求,就可以根据行的特点多加几个括号,然后用\1 \2什么的拼接一下。括号和或符号|别忘了加转义

拓展:

第10行下面插入“xxxx”
sed '10axxxx' test
第10行到第14行,每一行下面插入“xxxx”
sed '10,14axxxx' test
在aaaa的行下面插入"xxxx"
sed '/aaaa/axxxx' test
上面插入则把a换成i


将/etc/fstab文件的内容插入到test文件第10行下面
sed '10r /etc/fstab' test
将/etc/fstab文件追加到test文件的xxxx行下面
sed '/xxxx/r /etc/fstab' test
将/etc/fstab文件内容追加到test文件中特定行后面,匹配以ee开头的行,到第10行的所有行
sed '/^ee/,10r /etc/fstab' test
将test文件中匹配到/bin/bash的行追加到sed文件中
sed -i '/\/bin\/bash/w sed' test
将test文件从第10行开始,到匹配到/bin/bash的所有行内容追加到sed-1中
sed -i '10,/\/bin\/bash/w sed-1' test

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值