在 bash 脚本中注释掉匹配的字符串并在后面添加新行

在 bash 脚本中注释掉匹配的字符串并在后面添加新行

我正在尝试注释掉文件中匹配的字符串,并在匹配的字符串下方添加新行。有什么办法吗?可以使用 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)

记得:

  • 在括号前添加反斜杠
  • 用括号括住所有行

相关内容