我正在尝试注释掉文件中匹配的字符串,并在匹配的字符串下方添加新行。有什么办法吗?可以使用 sed 或 awk。
例如,
line1 is good
line2 is bad
line3 is to be commented
line4 is final
我想在这里匹配第 3 行(不使用行号)并将其注释掉并在其下方添加新行。
预期输出
line1 is good
line2 is bad
#line3 is to be commented
new line
line4 is final
答案1
输出到控制台:
sed '/^line3/s/^\(.*\)$/#\1\n/' testdata.txt
替换文件并创建备份:
sed -i.bak '/^line3/s/^\(.*\)$/#\1\n/' testdata.txt
在文件中替换:
sed -i '/^line3/s/^\(.*\)$/#\1\n/' testdata.txt
解释:
sed 的一般语法:
/pattern/action
图案是^line3
(用你的图案替换它)
行动是s/^\(.*\)$/#\1\n/
s- sed 替换命令 (s/pattern1/pattern2/)
^(.*)$- RegEx 模式匹配所有行
#\1\n- 用以下方式替换行:井号 (#) + RegEx 反向引用 (\1) + 新行 (\n)
记得:
- 在括号前添加反斜杠
- 用括号括住所有行