选项
sed -n
不再默认显示所有输出行
zct@zct-G7-7588:~/workspace/bash$ cat sed.log
This is 1 line!
This is 2 line!
This is 3 line!
This is 4 line!
This is 5 line!
zct@zct-G7-7588:~/workspace/bash$ sed -e "p;s/2/dog/p" sed.log
This is 1 line!
This is 1 line!
This is 2 line!
This is dog line!
This is dog line!
This is 3 line!
This is 3 line!
This is 4 line!
This is 4 line!
This is 5 line!
This is 5 line!
如上,在5行文本中不使用 -n 选项,那么会有这样的结果,无需替换的输入行会输出两次,分别为我们的指令‘p’输出一次,以及默认输出,需要注意的是默认输出所输出的行,是经过所有指令处理的结果,即使未被改变。而我们可以看到行数2被输出了3次,分别为‘p’一次,‘s/2/dog/p’一次,以及默认输出,而默认输出输出的就是经过‘s’指令处理的结果。所以当我们开启 -n 选项后,可以预测到会被输出的,只有输入的1-5除了2行各一次,而第二行会输出未改变以及改变后两次
zct@zct-G7-7588:~/workspace/bash$ sed -n -e "p;s/2/dog/p" sed.log
This is 1 line!
This is 2 line!
This is dog line!
This is 3 line!
This is 4 line!
This is 5 line!
sed -e
上面用过了,对某一行需要进行多个处理指令时用到,指令间用;隔开
指令
a
zct@zct-G7-7588:~/workspace/bash$ sed '3a\hello\' sed.log
This is 1 line!
This is 2 line!
This is 3 line!
hello
This is 4 line!
This is 5 line!
在某一行后加入一行
i
zct@zct-G7-7588:~/workspace/bash$ sed '3i\hello\' sed.log
This is 1 line!
This is 2 line!
hello
This is 3 line!
This is 4 line!
This is 5 line!
在某一行前加入一行
插入的内容用\包含
s
zct@zct-G7-7588:~/workspace/bash$ sed 's/line/enil/' sed.log
This is 1 enil!
This is 2 enil!
This is 3 enil!
This is 4 enil!
This is 5 enil!
替换某一行内的字符,/a/b/代表用b替换a,其具体指令形式是s/a/b/flag,flag可以是数字,g,p,w
分别代表,替换第n个出现的匹配字符,替换所有,打印该行和将结果写入文件
d
zct@zct-G7-7588:~/workspace/bash$ sed '2d' sed.log
This is 1 line!
This is 3 line!
This is 4 line!
This is 5 line!
删除某一行
c
zct@zct-G7-7588:~/workspace/bash$ sed '2c\hello world\' sed.log
This is 1 line!
hello world
This is 3 line!
This is 4 line!
This is 5 line!
替换行内内容
y
zct@zct-G7-7588:~/workspace/bash$ sed 'y/12345/6789c/' sed.log
This is 6 line!
This is 7 line!
This is 8 line!
This is 9 line!
This is c line!
单字符替换,12345对应6789c
注意一下,其中i,a指令我们在指令前显示的指定了行数2,这个可以认为是我们需要进行操作的行数,这个参数对于y,c等指令也是可行的,当你想要只对某一行进行特定的操作时,可以在指令前加上以下:
/string/ 一个你想要匹配的字符串,代表我需要对包含这字符串的行进行操作
n 一个数字,代表需要操作的行数
zct@zct-G7-7588:~/workspace/bash$ sed '2y/12345/6789c/' sed.log
This is 1 line!
This is 7 line!
This is 3 line!
This is 4 line!
This is 5 line!
我们在加上2后,y指令只对第二行产生了作用
zct@zct-G7-7588:~/workspace/bash$ sed '/3 line/y/12345/6789c/' sed.log
This is 1 line!
This is 2 line!
This is 8 line!
This is 4 line!
This is 5 line!
在我们加上/3 line/后,y指令只对包含了”3 line“这个字符串的第三行产生了作用
其他指令同理
附,多重操作如下:
‘/string/{command;command}’
zct@zct-G7-7588:~/workspace/bash$ sed '/3 line/{y/12345/6789c/;s/is/are/2}' sed.log
This is 1 line!
This is 2 line!
This are 8 line!
This is 4 line!
This is 5 line!