本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
6.3 单字符替换 y
使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错。
示例:
遇到n替换成2,遇到o替换成5。
[root@yuji ~]# sed 'y/no/25/' ff.txt //遇到n替换成2,遇到o替换成5
three
seve2
eight
[root@yuji ~]# sed 'y/no/255/' ff.txt
sed:-e 表达式 #1,字符 9:“y”命令的字符串长度不同
复制代码
7 sed 增加a i r
a:在行后添加内容
i:在行前插入内容
r:在行后读入文件内容
7.1 在行后添加内容a
示例1:在第一行下方添加一行内容
[root@yuji ~]# sed '1a 22' ff.txt //在第一行下方添加一行内容
22222
three
seven
eight
复制代码
示例2:在第1~3行,每行下方添加一行内容
[root@yuji ~]# sed '1,3a 22' ff.txt //在第1~3行,每行下方添加一行内容
three
seven
eight
复制代码
示例3:在最后一行的下方,添加一行内容
[root@yuji ~]# sed '$a 22' ff.txt //在最后一行的下方,添加一行内容
three
seven
eight
复制代码
示例4:在第一行下方添加3行内容
[root@yuji ~]# sed '1a 22\n33\n44' ff.txt //在第一行下方添加3行内容
three
seven
eight
复制代码
7.2 在行前插入内容 i
示例:
[root@yuji ~]# sed '1i 77' ff.txt //在第一行的上方,添加一行内容
three
seven
eight
[root@yuji ~]# sed '1,3i 77' ff.txt //在第1~3行每行的上方,添加一行内容
three
seven
eight
复制代码
7.3 在行后读入文件内容 r
示例:
[root@yuji ~]# cat hh.txt
hello world
[root@yuji ~]# sed '6r hh.txt' ff.txt //在第6行下方读入hh.txt文件内容
three
hello world
seven
eight
复制代码
8 sed 复制粘贴
比较vi/vim编辑器和 sed编辑器:
#vi//vim编辑器:
dd p 剪切 粘贴
yy p 复制 粘贴
:1,3 co 10 复制 粘贴(将第1~3行复制粘贴到第10行下方)
:1,3 m 10 剪切 粘贴(将第1~3行剪切到第10行下方)
#sed命令:
H复制、d删除、G粘贴到指定行下方
复制代码
示例1:剪切粘贴
H复制,d删除,通过”复制后删除“来达到剪切的效果。
[root@yuji ~]# sed '1,3 {H;d};$G' ff.txt //将第1~3行剪切粘贴到最后一行下方
seven
eight
three
[root@yuji ~]# sed '1,3 {H;d};5G' ff.txt //将第1~3行剪切粘贴到第5行后面
three
seven
eight
复制代码
示例2:复制粘贴
将1到3行复制粘贴到最后一行后面。(注意中间会多出一行空行)
[root@yuji ~]# sed '1,3 H;$G' ff.txt //将1到3行复制粘贴到最后一行后面
three
seven
eight
three
复制代码
9 文件内容中的字符串进行互换
示例1:
#将2个字符串交换位置
[root@yuji ~]# echo 111222333
111222333
[root@yuji ~]# echo 111222333|sed -r 's/(111)(222)/\2\1/'
222111333
#将3个字符串交换位置
[root@yuji ~]# echo 111222333|sed -r 's/(111)(222)(333)/\3\2\1/'
333222111
#将第一个字符和最后一个字符进行互换
[root@yuji ~]# echo 111222333|sed -r 's/^(.)(.*)(.)$/\3\2\1/'
311222331
复制代码
示例2:
将abc123修改成123abc、321cba。
[root@yuji ~]# echo abc123| sed -r 's/(abc)(123)/\2\1/'
123abc
[root@yuji ~]# echo abc123| sed -r 's/(.)(.)(.)(.)(.)(.)/\6\5\4\3\2\1/'
321cba
[root@localhost ~]# echo abc123| sed -r 's/(a)(b)(c)(1)(2)(3)/\6\5\4\3\2\1/'
321cba
复制代码
10 总结
1、sed的核心功能:增删改查(可配合正则表达式)
查: p
改: s(字符串替换)、c(整行替换)、y(对应字符进行替换,效果类似tr命令)
增: i(在行前插入内容)、a(在行后添加内容)、r(在行后读入文件的内容)
复制粘贴:H(复制)、d(删除)、G(粘贴到指定行下方)
复制代码
2、sed对指定行操作:
3、 sed -i 可以直接修改文件内容,操作前建议先验证命令和备份目标文件 。
4、删除空行的三种方法:
grep -v "^$" file.txt //过滤出非空行
cat file.txt |tr -s "\n" //压缩换行符
sed '/^$/d' file.txt //删除空行
复制代码
5、查找替换:
行范围 s/旧字符串/新字符串/替换标记
s/旧字符串/新字符串/2 #代表对每行第二个匹配到的字符串进行替换
g #代表对每行所有能匹配到的字符进行替换
p #可以结合-n 选项只打印替换的行内容
w #可以把替换的行内容保存到指定的文件中
n,m s/旧字符串/新字符串/ #指定第n行到第m行,将旧字符串替换成新字符串
/字符串+正则/ s/旧字符串/新字符串/ #过滤出想要的行,之后进行替换
s/^/添加的字符/ #行首添加内容
s/$/添加的字符/ #行尾添加内容
sed -f 文件 #指定脚本文件来执行,可以在文件中定义多条操作规则
sed指定字符串的分隔符,就看s后面跟的字符,3个分隔符要保持一致,如果遇到跟分隔符相同的字符则需要使用\来转义。
例如:s#/bin/bash#/sbin/nologin#g