Sed流编辑器随记:修订间差异

来自三线的随记
无编辑摘要
无编辑摘要
第10行: 第10行:
  L4 host_key_checking = False
  L4 host_key_checking = False
sed 默认为不修改原文件模式,需要修改生效自行在命令中添加 <code>-i</code>  参数
sed 默认为不修改原文件模式,需要修改生效自行在命令中添加 <code>-i</code>  参数
大多数情况下,sed 中的分隔符如 / @ #都是可以根据情况替换为任意正常字符
=== 多次执行 ===
配合 <code>-e</code> 参数可以多次执行 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
  sed "s@#L4 host_key_checking = False@host_key_checking=True@g" test.txt
@就是个分隔符,可以根据实际情况替换为其他任意字符,末尾的g选项代表同行多次出现则多次替换
@ 就是个分隔符,可以根据实际情况替换为其他任意字符,末尾的g选项代表同行多次出现则多次替换


=== 指定匹配行插入或追加 ===
=== 指定匹配行插入或追加 ===

2024年7月22日 (一) 15:33的版本

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