如图,一个简单的sed命令包含三个主要部分:参数、范围、操作。要操作的文件,可以直接挂在命令行的最后。除了命令行,sed也可以通过-f参数指定一个sed脚本,这个属于高级用法,不做过多描述。
有些示例命令我会重复多次,聪明如你一定能发现其中规律,有时连解释都用不着。
参数
-n 这个参数是--quiet或者--silent的意思。表明忽略执行过程的输出,只输出我们的结果即可。
我们常用的还有另外一个参数 :-i。
使用此参数后,所有改动将在原文件上执行。你的输出将覆盖原文件。非常危险,一定要注意。
范围
1,4 表示找到文件中1,2,3,4行的内容。
这个范围的指定很有灵性,请看以下示例(请自行替换图中的范围部分)。
5 选择第5行。
2,5 选择2到5行,共4行。
1~2 选择奇数行。
2~2 选择偶数行。
2,+3 和2,5的效果是一样的,共4行。
2,$ 从第二行到文件结尾。
范围的选择还可以使用正则匹配。请看下面示例。
/sys/,+3 选择出现sys字样的行,以及后面的三行。
/\^sys/,/mem/ 选择以sys开头的行,和出现mem字样行之间的数据。
为了直观,下面的命令一一对应上面的介绍,范围和操作之间是可以有空格的。
sed -n '5p' file
sed -n '2,5 p' file
sed -n '1~2 p' file
sed -n '2~2 p' file
sed -n '2,+3p' file
sed -n '2,$ p' file
sed -n '/sys/,+3 p' file
sed -n '/^sys/,/mem/p' file
操作
最常用的操作就是p,意思就是打印。比如,以下两个命令就是等同的:
cat file
sed -n 'p' file
除了打印,还有以下操作,我们来说常用的。
p 对匹配内容进行打印。
d 对匹配内容进行删除。这个时候就要去掉-n参数了,想想为什么。
w 将匹配内容写入到其他地方。
a,i,c等操作虽基本但使用少,不做介绍。我们依然拿一些命令来说明。
sed -n '2,5 p' file
sed '2,5 d' file
sed -n '2,5 w output.txt' file
我们来看一下sed命令都能干些啥,上点命令体验一下。
删除所有#开头的行和空行。
sed -e 's/#.*//' -e '/^$/ d' file
最常用的,比如下面这个。
sed -n '2p' /etc/group
表示打印group文件中的第二行。