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是将终端中比如默认带的首位行的—++++-去除,然后打印最后一行

浙公网安备 33010602011771号