上一个章节主要是针对修改和查询的操作,这个章节就说增删操作。
sed删除操作
知道了行号,根据行号删除,先删除第一行的数据
[root@www.wulaoer.org wulaoer]# sed -i '1d' access.log [root@www.wulaoer.org wulaoer]# sed -n '1p' access.log 10.10.2.1 2020:02:14:18:1 200 http://www.wulaoer.org/ HTTP/1.1 Mobile Safari/200.36
删除前15行的数据
[root@www.wulaoer.org wulaoer]# sed -i '1,15d' access.log [root@www.wulaoer.org wulaoer]# sed -n '1p' access.log 10.10.2.16 2020:02:14:18:16 200 http://www.wulaoer.org/ HTTP/1.1 Mobile Safari/200.36
删除50行以后的所有数据
[root@www.wulaoer.org wulaoer]# sed -i '20,$d' access.log #删除20行以后的所有数据 [root@www.wulaoer.org wulaoer]# sed -n '20p' access.log #查看第二十行的数据已经没有了 [root@www.wulaoer.org wulaoer]# sed -n '19p' access.log 10.10.2.34 2020:02:14:18:34 200 http://www.wulaoer.org/ HTTP/1.1 Mobile Safari/200.36
删除所有的空行
[root@www.wulaoer.org wulaoer]# sed -i '/^$/d' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '$=' wulaoer.txt #查看文件的最后一行行号 27 [root@www.wulaoer.org wulaoer]# sed -n '1,27p' wulaoer.txt nagios wulaoer wulaoer ruby wulaoer.org python3 运维服务 运维开发 jenkins Django 技术博客 mongodb mysql jenkins pinpoint zabbix nagios grafana cacti redis ES nginx php java prometheus apollo nacos spring dubbo
删除行首空格的三种方法:
[root@localhost ~]# sed -i 's/^[[:space:]]*//g' wulaoer.txt [root@localhost ~]# sed -i 's/^[ ]*//g' wulaoer.txt [root@localhost ~]# sed -i 's/^ *//g' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -i 's/^[[:space:]]*//g' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '1,27p' wulaoer.txt nagios wulaoer wulaoer ruby wulaoer.org python3 运维服务 运维开发 jenkins Django 技术博客 mongodb mysql jenkins pinpoint zabbix nagios grafana cacti redis ES nginx php java prometheus apollo nacos spring dubbo
删除所有包含wulaoer的行
[root@www.wulaoer.org wulaoer]# sed -i '/wulaoer/d' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '$=' wulaoer.txt 25 [root@www.wulaoer.org wulaoer]# sed -n '1,25p' wulaoer.txt nagios python3 运维服务 运维开发 jenkins Django 技术博客 mongodb mysql jenkins pinpoint zabbix nagios grafana cacti redis ES nginx php java prometheus apollo nacos spring dubbo
sed 命令处理换行符,例如替换或者删除
[root@www.wulaoer.org wulaoer]# sed ':label;N;s/\n/:/;b label' wulaoer.txt nagios:python3:运维服务:运维开发:jenkins:Django:技术博客:mongodb:mysql:jenkins:pinpoint:zabbix:nagios:grafana:cacti:redis:ES:nginx:php:java:prometheus:apollo:nacos:spring:dubbo [root@www.wulaoer.org wulaoer]# sed ':label;N;s/\n/:/;t label' wulaoer.txt nagios:python3:运维服务:运维开发:jenkins:Django:技术博客:mongodb:mysql:jenkins:pinpoint:zabbix:nagios:grafana:cacti:redis:ES:nginx:php:java:prometheus:apollo:nacos:spring:dubbo
sed文件增操作
在动作中使用到了a是追加,r是读取,i是插入,w是写入。
在文件的第一行追加字符串:"www.wulaoer.org"
[root@www.wulaoer.org wulaoer]# sed -i '1a www.wulaoer.org' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '2p' wulaoer.txt www.wulaoer.org
在文件的第三行和第四行后面追加wulaoer.org
[root@www.wulaoer.org wulaoer]# sed -i '3,4a wulaoer.org' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '2,6p' wulaoer.txt www.wulaoer.org python3 wulaoer.org 运维服务 wulaoer.org
在字符串python3后追加字符串"世界上最好的语言"
[root@www.wulaoer.org wulaoer]# sed -i '/python3/a 世界上最好的语言' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '1,5p' wulaoer.txt nagios个人技术博客 ruby.wulaoer.org python3 世界上最好的语言 ruby.wulaoer.org ruby wulaoer.org
nginx开头的行,在前面追加字符串"is web server"
[root@www.wulaoer.org wulaoer]# sed -i '/^nginx/i is web server' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '1,$p' wulaoer.txt ............. redis ES is web server nginx
文件的每一行后面都加字符串:"wulaoer.org"
[root@www.wulaoer.org wulaoer]# sed -i 'a wulaoer.org' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '1,5p' wulaoer.txt nagios个人技术博客 wulaoer.org ruby.wulaoer.org wulaoer.org python3
文件的最后一行追加字符串:"https://www.wulaoer.org"
[root@www.wulaoer.org wulaoer]# sed -i '$a https://www.wulaoer.org' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '$=' wulaoer.txt 63 [root@www.wulaoer.org wulaoer]# sed -n '63p' wulaoer.txt https://www.wulaoer.org
创建文件jenkins.txt,以便下面的测试
[root@www.wulaoer.org wulaoer]# vim jenkins.txt jenkins install
将jenkins.txt文件的内容追加到wulaoer.txt文件的第一行下
[root@www.wulaoer.org wulaoer]# sed -i '1r jenkins.txt' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '1,2p' wulaoer.txt nagios个人技术博客 jenkins install
将jenkins.txt文件内容追加到wulaoer.txt 文件匹配到nginx行的后面
[root@www.wulaoer.org wulaoer]# sed -i '/nginx/r jenkins.txt' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '45,50p' wulaoer.txt wulaoer.org nginx jenkins install wulaoer.org php wulaoer.org
将jenkins.txt文件内容追加到wulaoer.txt 文件中特定行后面,匹配以wulaoer开头的行,到第4行的所有行
[root@www.wulaoer.org wulaoer]# sed -i '/^wulaoer/,4r jenkins.txt' wulaoer.txt [root@www.wulaoer.org wulaoer]# sed -n '1,5p' wulaoer.txt nagios个人技术博客 jenkins install wulaoer.org jenkins install ruby.wulaoer.org
将passwd文件匹配到wulaoer的行追加到jenkins.txt文件中
[root@www.wulaoer.org wulaoer]# sed -i '/wulaoer/w jenkins.txt' wulaoer.txt [root@www.wulaoer.org wulaoer]# cat jenkins.txt wulaoer.org ruby.wulaoer.org wulaoer.org wulaoer.org wulaoer.org
将wulaoer.txt 文件从第10行开始,到匹配到wulaoer的所有行内容追加到jenkins.txt
[root@www.wulaoer.org wulaoer]# sed -i '10,/wulaoer/w jenkins.txt' wulaoer.txt [root@www.wulaoer.org wulaoer]# cat jenkins.txt wulaoer.org jenkins install 世界上最好的语言 wulaoer.org
将文件wulaoer.txt 文件中匹配wulaoer和jenkins的行和内容写到jenkins.txt文件中。
[root@www.wulaoer.org wulaoer]# sed -n '/wulaoer\|jenkins/w jenkins.txt' wulaoer.txt [root@www.wulaoer.org wulaoer]# cat jenkins.txt jenkins install wulaoer.org jenkins install ruby.wulaoer.org
将文件wulaoer.txt中的内容写入到wulaoer.txt 文件中
[root@www.wulaoer.org wulaoer]# sed -n 'w jenkins.txt' wulaoer.txt
将文件wulaoer.txt 中的第二行内容写入到jenkins.txt文件中
[root@www.wulaoer.org wulaoer]# sed -n '2w jenkins.txt' wulaoer.txt
将wulaoer.txt的第一行和最后一行内容写入到jenkins.txt中
[root@www.wulaoer.org wulaoer]# sed -n -e '1w jenkins.txt' -e '$w jenkins.txt' wulaoer.txt
将wulaoer.txt 文件中的第一行和最后一行分别写入到1.txt和2.txt文件中
[root@www.wulaoer.org wulaoer]# sed -n -e '1w 1.txt' -e '$w 2.txt' wulaoer.txt
将wulaoer.txt文件中匹配123的行到最后一行的内容下如到jenkins.txt文件中。
[root@www.wulaoer.org wulaoer]# sed -n '/123/,$w jenkins.txt' wulaoer.txt
将wulaoer.txt 文件中匹配123的行以及后两行的内容下如到jenkins.txt文件中。
[root@www.wulaoer.org wulaoer]# sed -n '/123/,+2w jenkins.txt' wulaoer.txt
sed动作
sed不加参数,只聊动作,在sed中有哪些动作,不同的动作是做什么的有什么意义,我们先看一下:
i: 插入,i前面是整数代表行业可以是范围,后面跟的是插入的字符串,代表在某一行或范围下面插入字符串。 d:删除,d前面是整数代表行也可以是范围,代表删除某一行或某一范围。 a: 新增,a前面是整数代表行也可以是范围,后面跟的是新增的字符串,代表在某一行或范围后面追加字符串。 c:取代,c前面是整数代表行也可以是范围,后面跟的是取代的字符串,代表在某一行或范围替换成后面的字符串。 s: 取代,通常在有参数的命令中,配合正则一起使用 p:打印,p前面是整数代表行也可以是范围,代表打印某一行或某一范围。
以上这些动作,在不加参数的情况下,都不会对源文件进行更改。除s和p之外,因为这两个动作必须要配合参数才可以使用
我自己先创建了一个文本文件,然后在文件中加了一些关键词,下面的例子主要围绕这个文件进行操作:
[root@www.wulaoer.org ~]# cat wulaoer.txt nagios word python3 运维服务 运维开发 DevOps ruby Django golong学习 golong 技术博客 mongodb mysql
在第二行插入关键词"吴老二",我们不使用参数,值使用动作操作,看一下加参数和不加参数的区别。
[root@www.wulaoer.org ~]# sed '2i 吴老二' test.txt nagios 吴老二 word python3 运维服务 运维开发 DevOps ruby Django golong学习 golong 技术博客 mongodb mysql
这里的参数没有,只有动作"'2i 吴老二'",所以返回一个在第二行插入关键词的内容,但是没有写到文件中,如果想要写到文件中,需要增加参数"-i",这个在后面的参数i中有详细的描述。下面看一下
[root@www.wulaoer.org ~]# sed '2d' test.txt nagios python3 运维服务 运维开发 DevOps ruby Django golong学习 golong 技术博客 mongodb mysql
这里的"2d"是删除的动作,如果删除多行可以在'd'前面加个范围,例如:sed '2,5d' test.txt 就是删除从第二到第五行,如果想删除6行一下的内容可以使用动作'6,$d'。没有写到文件中,同样如果增加参数'-i'就会在原文件中删除第二行的内容。
[root@www.wulaoer.org ~]# sed '2a 吴老二' test.txt nagios word 吴老二 python3 运维服务 运维开发 DevOps ruby Django golong学习 golong 技术博客 mongodb mysql
'a'的动作是追加,是追加到某一行,不是在某一行后追加内容,范围和上面的一样。
[root@www.wulaoer.org ~]# sed '3,8c www.wulaoer.org' test.txt nagios wulaoer www.wulaoer.org Django golong学习 golong 技术博客 mongodb mysql
以上是针对sed的用法,不足之处还需提出,虚心请教。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏