简介:
sed本身是一个管道命令,可以分析standard input的,而且sed还可以将数据进行替换、删除、新增、选取特定行等的功能。
~]# sed [-nefr] [动作]
参数:
-n :使用安静模式。在一般的sed的用法中,所有来自stdin的数据一般都会被列出到屏幕上。但如果加上-n参数后, 则只有经过sed特殊处理的那一行才会被列出
-e :直接在命令行模式上进行sed的动作编辑。
-f :直接将sed的动作写在一个文件内, -f filename则可以执行filename内的sed动作
-r :sed的动作支持的是扩展型正则表达式的语法
-i :直接修改读取的文件内容,而不是由屏幕输出。
动作说明:[n1,n2] function
n1,n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20行之间进行的, 则“10,20[动作行为]”
function 有下面这些参数:
a : 新增, a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c : 替换, c的后面可以接字符串,这些字符串可以替换n1,n2之间的行!
d:删除, 因为是删除,所以d后面通常不接任何参数
i : 插入, i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
P : 打印, 也就是将某个选择的数据打印出来,通常p会与参数sed -n一起运行。
s : 替换, 可以直接进行替换的工作,通常这个s的动作可以搭配正则表达式!例如1,20s/old/new/g 。
=:为模式匹配到的行打印行号
!:条件取反;
地址界定!编辑命令
v 以行为单位的新增/删除功能
范例一:将/etc/passwd的内容列出并且打印行号,同时,请将第2~5行删除!
~]# nl /etc/passwd | sed ‘2,5d’
注意:sed后面接的动作,请务必以’’两个单括号括住。
如果只要删除第2行,就可以使用“nl /etc/passwd | sed ‘2d’ ”来完成,至于若是要删除第3到最后一行,则 是“nl /etc/passwd | sed ‘3,$d ”的,那个“$”代表最后一行。
范例二:承上题,在第二行后(即是加在第三行)加上“drink tea”字样!
~]# nl /etc/passwd | sed ‘2a drink tea’
在a后面加上的字符串就已将出现在第二行后面。那如果是要在第二行前 呢? “nl /etc/passwd | sed ‘2i drink tea’”就对了,就是将“a”变成“i”即可。增加一行很简单,那如果是要 增加两行以上呢?
范例三:在第二行后面加入两行字,例如:“Drink tea or......”与“drink beer?”
~]# nl /etc/passwd | sed ‘2a Drink tea or .....\
>drink beer?’
这个范例的重点是我们可以新增不只一行,可以新增好几行,但是每一行之间都必须要以反斜杠“\”来进行新 行的增加。所以,上面的例子中,我们可以发现在第一行的最后面就有\存在,那是一定要的。
v 以行为单位的替换与显示功能
范例四:将第2-5行的内容替换成为“No 2-5 number”。
~]# nl /etc/passwd | sed ‘2,5c No 2-5 number’
通过这个方法就能够将数据整行替换了。非常容易吧!sed还有更好用的工具。我们以前想要列出第11~20行, 得要通过“head -n 20 | tail -n 10”之类的方法来处理,很麻烦。sed则可以简单直接取出你想要的那几行,是通过 行号来找的。
范例五:仅列出/etc/passwd文件内的第5-7行
~]# nl /etc/passwd | sed -n ‘5,7p’
注意:如果没有加 “-n” 那么会重复显示
v 部分数据的查找并替换的功能
sed ‘s/要被替换的字符串/新的字符串/g’
替换标记:
g:全局替换
W /PATH/TO/SOMEFILE :将替换成功的结果保存至指定文件中。
p:显示替换成功的行
范例六:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符。
~]# sed ‘s@^[[:space:]]\+@@’ /boot/grub/grub2.cfg
v 地址界定:
n1:显示第n1行
n1,n2:显示n1至n2之间的行
$:最后一行
1~2:显示所有奇数行
2~2:显示所有偶数行
v 高级编辑命令
h:把模式空间中的内容覆盖至保存空间中
H:把模式空间中的内容追加至保存空间中
g:把保持空间中的内容覆盖至模式空间中
G:把保持空间中的内容覆盖至模式空间中
x:把模式空间中的内容与保持空间中的内容互换
n:覆盖读取匹配匹配到的行的下一行至模式空间中
N:追加读取匹配到的行的下一行至模式空间中
d:删除模式空间中的行
D:删除多行模式空间中的所有行
示例:
sed -n ‘n;p’ file : 显示偶数行
sed ‘1!G;h;$!d’ file: 逆序显示文件的内容
sed ‘$!d’ file : 取出最后一行
sed ‘$!N;$!D’ file : 取出文件最后两行
sed ‘/^$/d;G’ file : 删除原有的所有空白行,而后为所有的非空白行后添加一个空白行。
sed ‘n;d’ file : 显示奇数行
sed ‘G’ file : 在原来的每行后方添加一个空白行