如何使用 sed 在配置文件中注释和添加行



我正在寻找一种方法来实现以下目标:

某个目录包含 4 个(配置(文件:

  • 文件1
  • 文件2
  • 文件3
  • 文件4

我希望我的 bash 脚本逐个读取每个文件。在每个文件中,查找以"params:"开头的某一行。我想注释掉这一行,然后在下一行中输入"参数:根据我的意愿更改"。

我知道有很多方便的工具,例如 sed 来帮助完成此类任务。所以我试了一下:

sed -ri 's/params:/^\\*' File1.conf
sed -ri '/params:/params: changed according to my will' File1.conf

问题:第一行是否真的将正则表达式params:替换为\,跟随找到params:的整行的副本?我不确定我是否可以在这里使用 *。

那么,我将如何实现对所有 4 个文件执行这些命令?

因此,此命令将在您的文件中以params:开头的每一行进行注释,并在下一行附加文本

sed -E -i 's/^(params:.*)$///1nYOUR NEW LINE HERE/g'

模式^(params:.*)$将匹配以 params: 开头的任何整行,括号表示这是一个捕获组。

然后,它通过1在 sed 命令的第二部分使用,这是找到的第一个捕获组的引用。因此,您可以看到第二部分注释第一行,添加换行符,最后是文本。

您只需执行sed -E -i 's/^(params:.*)$///1nYOUR NEW LINE HERE/g' file1 file2 file3 file4即可对所有文件执行此操作

希望这有帮助!

你可以这样做:

for i in **conf
do
cp $i $i.bak
sed -i 's/(params:)(.*)$/#12n1new value/' 
done

附:(params:)(.*)

  • 匹配params:并将其存储在 '\1 中
  • 匹配.*:后面的文本并将其存储在2

然后创建两行:

  • 第一行评论:#12n
  • 具有所需值的新行:1new value

这可能对你有用(GNU sed 和 parallel(:

parallel --dry-run -q sed -i 's/^params:/#&/;T;aparams: bla bla' {} ::: file[1-4]

在所需的目录中运行它,如果命令正确,则删除--dry-run选项并真正运行。

最新更新