相比于grep,sed可以替换内容并输出到屏幕上。
sed [选项] '动作' filename
选项
-n : 将经过sed命令处理过的行输出到屏幕
-e : 允许对输入数据应用多条sed命令
-i : 用sed的修改结果直接修改所读取的文件
......
动作
d : 删除
p : 打印
s : 字串替换(本行)
g : 本行全局替换
......
例:
打印/etc/passwd文件的第3行
$sed -n '3p' /etc/passwd
打印2到4行
$sed -n '2,4p' /etc/passwd
打印所有行
$sed -n '1,$p' /etc/passwd
#test文件内容如下
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:root:/bin:/usr/sbin/nologin
打印包含root的行
$sed -n '/root/p' test
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:root:/bin:/usr/sbin/nologin
注意在命令中“/”为分隔符。
加上 -e 命令可以实现多个行为
$sed -e '/bash/p' -e '/sbin/p' -n test
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:root:/bin:/usr/sbin/nologin
删除某行并或者多行
$sed '2d' test
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:root:/bin:/usr/sbin/nologin
#==========================
$sed '/root/d' test #删除包含root的行
替换字符或者字符串
#s为替换的动作,g为本行全局替换,若没有g则替换本行的第一个。
$sed '1s/root/iam/g' test
iam:x:0:0:iam:/iam:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:root:/bin:/usr/sbin/nologin
#将第一行所有的root替换成iam。
#sed 's/root/iam/g' test
#文件中所有root都替换成iam
替换的格式为: sed ‘s/旧字串/新字串/g filename
“/”为分隔符,也可以使用“#”、“@”等特殊字符。
#删除文档中所有的root
$sed 's/root//g' test
:x:0:0::/:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2::/bin:/usr/sbin/nologin
#只要将新字串的位置设为空即可。
动作 a(行后追加) ,c(行替换),i(行前追加)