编辑命令:
d:删除
sed '1,5d' /etc/fstab
p:打印,必须使用-n参数;
ifconfig | sed -n '2p' 显示第二行
sed '1~2p' /etc/fstab 奇数行会显示2次
sed -n '1~2p' /etc/fstab 只显示奇数行
sed '1~2d' /etc/fstab 显示偶数行
i\text:在行前面插入文本"text",支持使用\n实现多行插入;
sed '3 i \new line' /etc/fstab 在第三行前面插入new line
sed '3 i \new line\nanother new line' /etc/fstab
a\text:在行后面追加文本"text",支持使用\n实现多行追加;
sed '3 a \new line' /etc/fstab 在第三行后面插入new line
sed '/UUID/ a \new line' /etc/fstab 在包含UUID的行后面插入new line
c\text:把匹配到的行替换为此处指定的文本"text",注意是整行替换;
w:保存匹配到的结果到指定位置;
sed -n '/^[^#]/p' /etc/fstab
sed '/^[^#]/w /tmp/fstab.new' /etc/fstab
r:从其它文件读取文本,并插入匹配行之后;文件合并;
sed '3 r /etc/issue' /etc/fstab
=:为匹配到的行打印行号;
sed '/^UUID/=' /etc/fstab
!:条件取反;
sed '/^[^#]/d' /etc/fstab 删除非#开头的行
sed '/^#/!d' /etc/fstab 删除非#开头的行
sed '5!d' /etc/fstab 只保留第5行(处理未匹配到的行)
s///:查找替换,其分隔符可自行指定,常用的有s@@@,s###等;
默认情况只替换第一次匹配到的内容;
sed 's/line/LINE'
要想每行最多匹配2个,可使用/2
sed 's/line/LINE/2'
替换标记:
g:全局替换;
p:显示替换成功的行;
w:将替换成功的结果保存至指定文件中;
&:引用前面搜索到的整个内容;
查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
:%s@^[[:space:]]@#&@g
\(\):后向引用,引用分组;如s/\(love\)able/\1r,loveable替换成lovers;
练习:
1、删除/etc/prelink.conf.d/grub2.conf文件中所有以空白字符开头的行的行首的空白字符;
sed 's@^[[:space:]]\+@@' /etc/prelink.conf.d/grub2.conf
2、删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
sed 's@^#[[:space:]]*@@' /etc/fstab
3、输出一个绝对路径给sed,取出其目录;
echo "/var/log/messages" | sed 's@[^/]\+$@@'
echo "/var/log/messages" | sed -r 's@[^/]+$@@'
4、在/root/install.log每一行行首增加#号;
sed 's@^.*@#&@' /root/install.log
sed 's@^@#@' /root/install.log
5、在/etc/fstab文件中不以#开头的行的行首增加#号;
sed '/^#/!s@.*@#&@' /etc/fstab (处理未匹配到的行)
sed '/^#/!s@^@#@' /etc/fstab
6、处理/etc/fstab路径,使用sed命令取出其目录名和基名;
echo "/etc/fstab" | sed 's@[^/]\+$@@'
echo "/etc/fstab" | sed 's@^.*[/]@@'
示例:
sed -n 'n;p' file:显示偶数行;
sed '1!G;h;$!d' file:逆序显示文件内容;
sed '$!d' file:取出最后一行;
sed '$!N;$!D' file:取出后两行;
sed '/^$/d;G' /etc/fstab:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
sed 'n;d' file:显示奇数行;
sed 'G' file:在原有的每行后方添加一个空白行;
sed -n '1!G;h;$p' file:逆序显示文件内容;