Sed流编辑器随记
来自三线的随记
官方Docs(Redhat系sed): https://sed.sourceforge.io/
有如下文本 text.txt ,下述为基于此文件的使用sed进行操作的用法
L1 aabb L2 ccdd #L3 jjhh L4 host_key_checking = False
sed 默认为不修改原文件模式,需要修改生效自行在命令中添加 -i
参数
大多数情况下,sed 中的分隔符如 / @ #都是可以根据情况替换为任意正常字符
多次执行
配合 -e
参数可以多次执行 sed 表达式
sed -e "s/L1/Line0001/" -e "s#L3#Line0003#" test.txt
字符串替换
sed "s@#L4 host_key_checking = False@host_key_checking=True@g" test.txt
@ 就是个分隔符,可以根据实际情况替换为其他任意字符,末尾的g选项代表同行多次出现则多次替换
指定匹配行插入或追加
在L2行前插入文字: i 选项
sed "/L2/i 556677" test.txt
在L2行后插入文字: a 选项
sed "/L2/a 556677" test.txt
添加或解除注释
指定匹配行头添加注释
sed "s/^L2/#&/" test.txt
& 为特殊字符,意为替换为前面所匹配中的内容
An ampersand (&) appearing in the replacement will be replaced by the string matching the RE.
指定匹配行头取消注释
类似正则中子字符串匹配后引用的用法
sed "s/^#\(L3\)/#\1/" test.txt