我正在寻找一种方法来实现以下目标:
某个目录包含 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
选项并真正运行。