6.3 单字符替换 y
使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错。
示例:
遇到n替换成2,遇到o替换成5。
[root@yuji ~]# sed 'y/no/25/' ff.txt //遇到n替换成2,遇到o替换成5 52e tw5 three f5ur five six seve2 eight 2i2e te2 [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 //在第一行下方添加一行内容 one 22222 two three four five six seven eight nine ten 复制代码
网络异常,图片无法展示
|
示例2:在第1~3行,每行下方添加一行内容
[root@yuji ~]# sed '1,3a 22' ff.txt //在第1~3行,每行下方添加一行内容 one 22 two 22 three 22 four five six seven eight nine ten 复制代码
网络异常,图片无法展示
|
示例3:在最后一行的下方,添加一行内容
[root@yuji ~]# sed '$a 22' ff.txt //在最后一行的下方,添加一行内容 one two three four five six seven eight nine ten 22 复制代码
网络异常,图片无法展示
|
示例4:在第一行下方添加3行内容
[root@yuji ~]# sed '1a 22\n33\n44' ff.txt //在第一行下方添加3行内容 one 22 33 44 two three four five six seven eight nine ten 复制代码
网络异常,图片无法展示
|
7.2 在行前插入内容 i
示例:
[root@yuji ~]# sed '1i 77' ff.txt //在第一行的上方,添加一行内容 77 one two three four five six seven eight nine ten [root@yuji ~]# sed '1,3i 77' ff.txt //在第1~3行每行的上方,添加一行内容 77 one 77 two 77 three four five six seven eight nine ten 复制代码
网络异常,图片无法展示
|
7.3 在行后读入文件内容 r
示例:
[root@yuji ~]# cat hh.txt hello world [root@yuji ~]# sed '6r hh.txt' ff.txt //在第6行下方读入hh.txt文件内容 one two three four five six hello world seven eight nine ten 复制代码
网络异常,图片无法展示
|
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行剪切粘贴到最后一行下方 four five six seven eight nine ten one two three [root@yuji ~]# sed '1,3 {H;d};5G' ff.txt //将第1~3行剪切粘贴到第5行后面 four five one two three six seven eight nine ten 复制代码
网络异常,图片无法展示
|
示例2:复制粘贴
将1到3行复制粘贴到最后一行后面。(注意中间会多出一行空行)
[root@yuji ~]# sed '1,3 H;$G' ff.txt //将1到3行复制粘贴到最后一行后面 one two three four five six seven eight nine ten one two 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 删: d 改: 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