sed:Stream EDitor,流编辑器
用法:
sed [option]... ‘script’ inputfile...
script '地址命令'
常用选项:
-n:静默模式,不输出模式中的内容只屏幕;
-e:多点编辑;
-f /FILE:从指定文件中读取编辑脚本
-r:支持试用扩展正则表达式
-i:原处编辑,编辑原文件
地址定界:
1、不给地址:对全文进行处理
2、单地址
#:指定的行
/pattern/:被此处模式匹配到的每一行
3、地址范围
#,#:#行至#行
#,+#:#行至其后+#行
/pat1/,/pat2/:第一次pat1匹配到的行至第一次pat2匹配的行
#,/pat/:#行至第一次pat匹配到的行
编辑命令:
d:删除
p:显示模式空间中的内容
a \text:在被匹配的行后追加文本,使用\n实现多行追加
i \text:在被匹配的行前追加文本,使用\n实现多行插入
c \text:替换匹配的行
w /file:将匹配的行保存到file中
r /file:将/file读取到匹配到的行后
=:为匹配到的行打印行号
!:取反条件,表示对未匹配到的行进行编辑
s///:查找替换,支持试用其他符号
替换标记:
g:行内全局替换
p:显示替换成功的行
w /file:将替换的行保存到指定文件
模式空间:读取文件中的一行到模式空间,查看是否地址定界,符合则进行编辑
保持空间:未完成编辑的行会暂时放在保持空间
高级编辑命令
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配行的下一行至模式空间
N:追加匹配行的下一行至模式空间
d:删除模式空间中的行
D:删除多行模式空间中的所有行
实例:
sed 's@^[[:space:]]\+@@' /file:删除文件以空白字符开头的行行首的空白字符
sed 's@^#[[:space:]]\+@@' /file:删除文件以#开头后面至少一个空白字符的行行首的#和空白字符
echo "/etc/sysconfig"| sed 's@[^/]\+/\?$@@':echo一个绝对路径,取出基名
sed -n 'n;p' file:显示偶数行
sed '1!G;h;$!d' file:逆向显示文件内容
sed '$!N;$!D' file:取出文件最后两行
sed '$!d' file:取出文件最后一行
sed 'G' file:在每一行后添加一个空白行
sed 'g' file:把每一行替换成空白行
sed '/^$/d;G' file:每一行后边都会有一个空白行(原有多个空白行会合并成一个空白行,
没有空白行会添加一个空白行)
sed 'n;d' file:显示奇数行
sed -n '1!G;h;$p' file:逆向显示文件
sed -n '1~2p' file:从第一行步进两行显示
sed -n '2~2p' file:从第二行步进两行显示