sed用法
sed (流编辑器)
1.sed默认不编辑源文件,仅对模式空间的数据进行处理,处理后打印至屏幕
格式:sed 地址编辑命令文件(可以有多个)
地址:就是对那些行做出处理。格式中可以不用空格,就是地址空间中间可以不用空格。
指定地址的方法:
(1)起始行,结束行。 例子:1,100 如果是单独一行直接写行号即可
(2)使用模式 :/正则表达式/ 例子:/^root/ 以root开头的行
(3)/模式1/,/模式2/ 表示第一次被“模式1匹配的行开始”,至第一次被“模式2匹配的行结束这中间 所有的行。
(4)指定的行 $:表示最后一行, $-1:表示倒数第二行。
(5)指定的行,+N :表示从指定的行开始,向后的N行。
编辑命令
(1)d:删除符合条件的行
(2)p:显示符合条件的行
(3)a \字符串:在指定的行下边添加新行,内容为字符串。
(4)i \字符串: 在指定的行上边添加新行,内容为字符串
(5)c \字符串:替换当前行的内容
(6)r: 将指定的文件的内容添加至符合条件的行处
(7)w: 将指定范围内的内容另存值指定的文件中。
2.编辑命令例子
例子文件,以下的例子使用此文件
[root@client2 ~]# cat abc
123456
qwe
hello
nihao
benet
accp
(1)d:删除符合条件的行
例子1:删除abc文件中的第一行
[root@bogon ~]# sed '1d' abc
qwe
hello
nihao
benet
accp
例子2:删除文件中的1至3行
[root@client2 ~]# sed "1,3d" abc
nihao
benet
accp
注意:sed后边的引号用单引号双引号都可以,但是如果里边有变量,而且变量要替换,就要用双引号。
但是这样修改没有修改源文件,而是修改了模式空间的内容。
如果想直接修改源文件请加上-i选项
(2)p:显示符合条件的行
sed -n:静默模式 不在默认显示模式空间中的内容。 结合P命令使用,这样符合条件的行就不会显示2遍。模式空间也不会显示
例子:我们将1到3行打印到屏幕上,如果不加-n选项的话结果是以下效果
[root@client2 ~]# sed "1,3p" abc
123456
123456
qwe
qwe
hello
hello
nihao
benet
accp
1到3行的内容都被显示了2次
加上-n选项就不会出现以上情况了
[root@client2 ~]# sed -n "1,3p" abc
123456
qwe
hello
(3)a:\字符串:在指定的行下边添加新行,内容为字符串。
例子:在第一行的下一行添加字符串hello
[root@client2 ~]# sed '1a \hello' abc
123456
hello #添加完成
qwe
hello
nihao
benet
accp
(4)i \字符串: 在指定的行上边添加新行,内容为字符串
例子:在第一行的上一行添加字符串hello
[root@bogon ~]# sed '1i hello' abc
hello
123456
qwe
hello
nihao
benet
accp
(5)c \字符串:替换当前行的内容
例子:将第一行的内容替换成hello。
[root@bogon ~]# sed '1c hello' abc
hello
qwe
hello
nihao
benet
accp
(6) r 文件:将指定的文件的内容添加至符合条件的行处
例子:将b文件的内容添加到第2行下边
[root@bogon ~]# sed '2r /root/b' abc
123456
qwe
benet
hello
nihao
benet
accp
w 文件:将指定范围内的内容另存值指定的文件中。
例子:将abc文件中的1到3行保存到b文件中
sed '1,3w /root/b' abc
4.sed替换操作
格式:sed "s/旧内容/新内容/g" 文件名
例子1:将第一行内容的6替换成8
[root@bogon ~]# sed '1 s/6/8/g' abc
123458
qwe
hello
nihao
benet
accp
例子2:在第一行的行首添加#号进行注释
[root@bogon ~]# sed '1 s/^/#/g' abc
#123456
qwe
hello
nihao
benet
accp
例子3:在第一行的行尾添加hello
[root@bogon ~]# sed '1 s/$/hello/g' abc
123456hello
qwe
hello
nihao
benet
accp
例子4:在第一行3的后边添加hello
[root@bogon ~]# sed '1 s/3/&hello/g' abc
123hello456
qwe
hello
nihao
benet
accp
5.选项
sed -i :直接修改源文件
直接删除了源文件的第一行
sed -i '1d' abc
以上所有的例子没有加-i选项的没有直接修改源文件而是修改了模式空间的内容