Sed流编辑器随记

来自三线的随记
Admin讨论 | 贡献2024年7月22日 (一) 15:35的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

官方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