linuxx-SHELL-Sed

一、sed用法

command:

a:新增,当前行的下一行

c:取代

d:删除

i:插入

1、显示某行:

[root@centos74-k8s ~]# sed -n '1p'  test.txt 

[root@centos74-k8s ~]# sed -n '1,2p'  test.txt

[root@centos74-k8s ~]# sed -n '1,5p'  test.txt

2、w 标记会将匹配后的结果保存到指定文件中:

将test.txt中admin所在的行保存到test1.txt中

[root@centos74-k8s ~]# sed -i '/admin/w test1.txt' test.txt

将test中admin换成ADMIN并保存到test1.txt(test.txt中的admin不变)

[root@centos74-k8s ~]# sed  -i  's/admin/ADMIN/w test1.txt' test.txt

加-i,test与test1都会变成大写

不加-i,只有test1的admin是大写

3、d删除

比如要删除test.txt中第1-4行,其命令如下:

[root@centos74-k8s ~]# sed  -i '1,4d'  test.txt 

若要删除最后一行,命令如下:

[root@centos74-k8s ~]# sed -i '$d' test.txt

删除含有admin的行:

[root@centos74-k8s ~]# sed -i  '/admin/d' test.txt

删除第3行-6行除外的的其他行,意思是只保留3-6行

[root@bms-6e4a-0918 ~]# sed -i '3,6!d' 1.sh 

删除匹配字符的行

[root@bms-6e4a-0918 ~]# sed '/true\|user/d' 1.sh 

4、s命令用于文本替换

将test文本中true的后面都加上12,&代表前面搜索的字符

[root@centos74-k8s ~]# sed  -i  's/true/& 12/' test.txt 

将test文本中true的前面都加上12

[root@centos74-k8s ~]# sed  -i  's/true/12 & /' test.txt

5、r 命令用于将一个独立文件的数据插入到当前数据流的指定位置

将test1的内容插入到test2.txt的第二行之后

[root@centos74-k8s ~]# sed '2r test1.txt' test2.txt

如果你想将指定文件中的数据插入到数据流的末尾,可以使用 $ 地址符

sed '$r test1.txt' test2.txt

[root@docker01 ~]# sed -i.bak '1i\ews' ren.txt    ##将ren.txt备份,并在ren.txt继续操作,在第一行添加ews字符

 6、打印内容并显示行号

[root@k8s-master ~]# sed -n '/cic/,/compute/{=;p}' 1.yml| sed 'N;s/\n/\t/' | tee 2

 p 打印匹配行

  = 打印匹配行号

 

打印从cic所在行,到compute所在行,并打印行号。并输出文件2

 

7、[root@k8s-master ~]# sed -n '/\bcic\b/ p' config.yaml 

匹配包含cic作为整个单词的行

 

8、

[root@k8s-master ~]# sed -n '2,+2p' 1.yml #打印第二行以及后2行

[root@k8s-master ~]# sed -n '2,+1p' 1.yml   #打印第二行以及后一行

[root@k8s-master ~]# sed -n '2p' 1.yml    #打印第二行

 

[root@k8s-master ~]# sed -n '2,+1p;3,+2p' 1.yml #打印第二行以及后一行;第三行以及后2行

 

打印文件中间几行,显示28-38 行中间的内容:

cat /etc/cli.cfg | head -n 38 |tail -n +28 head -n 38

显示38行前面的 tail -n +28 从28行开始显示

tail -n 1000:显示最后1000行

tail -n +1000:从1000行开始显示,显示1000行以后的

head -n 1000:显示前面1000行

删除某行中的*号

[root@docker01 ~]# cat *.yaml | grep -w "nic_assignment:" | sed 's/*//g'  

 

sed -n "x;$p"    ##x命令是将当前保持空间和模式空间内容互换

$p打印最后一行,x是将终端中比如默认带的首位行的—++++-去除,然后打印最后一行

posted @ 2020-09-17 00:22  闲云野鹤cs  阅读(164)  评论(0)    收藏  举报