sed
常用选项
-n:不输出模式空间中的内容至屏幕
-e:多点编辑(可以多个命令进行)
-f:每行一个编辑命令
-r:支持使用扩展正则表达式
-i:直接编辑原文件
地址定界
1、空地址:对全文进行处理
2、单地址:
#:指定行
/pattern/:被此模式所匹配到的每一行
3、地址范围
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
4、步进:~
1~2:所有的奇数行
2~2:所有偶数行
编辑命令:
d:删除
p:显示模式空间中的内容
a ext:在行后面追加文本,支持使用 实现多行追加
i ext:在行前面插入文本,支持使用 实现多行插入
c ext:把匹配到的行替换为此处指定的文本
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并
=:为模式匹配到的行打印行号(sed '/^UUID/=' /etc/fstab)
!:条件取反(sed '/^#/!d' /etc/fstab)
s///:查找替换,分隔符可自行指定
替换标记:
g:全局替换
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
p:显示替换成功的行
练习1:删除/boot/grub2/grub.cfg文件中所有以空白字符开头的行的行首的所有空白字符
sed 's/^[[:space:]]+//g' /boot/grub2/grub.cfg
练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符
sed 's/^#[[:space:]]*//g' /etc/fstab
练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname
echo "/var/log/messages" | sed 's/[^/]+$//'