Linux正则表达式 sed

相比于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(行前追加)

你可能感兴趣的:(Linux命令)