我这里有数千个文件,我必须对其进行替换。所以我正在尝试创建一个 bash 程序,它将循环遍历所有旧变量并用新变量替换它们。这就是我目前所拥有的。
例如,我有一个包含所有旧变量和新变量的文件:所以我需要用第二个值替换第一个值。我已将此文件命名为 new.
web_lgl,web_lgl_index
web_matchmaker,web_matchmaker_index
web_mds,web_mds_index
web_metadata,web_metadata_index
web_mqmon,web_mqmon_index
web_pdconfig,web_pdconfig_index
web_people,web_people_index
web_pescado,web_pescado_index
现在我写了一个 while 循环如下
while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "s/$old/$new/g" '{}' \;
done < new
这确实有效。它用新值替换旧值。但在 savesearches.conf 文件中,我尝试针对特定字符串进行替换,例如
index="web_lgl"
index = "web_matchmaker"
index= "web_pdconfig"
而不是文件中的一些随机句子,例如
description: web_lgl contains AWS data. which is collected from AWS.
所以我需要调整我的 bash 脚本,以便我可以仅针对以 index= 作为起始部分的变量,并忽略该字符串的所有其他出现。我尝试将 index= 添加到 bash 程序中,但没有得到任何命中。例如,下面的代码不会产生任何命中。
while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "s/index=$old/index=$new/g" '{}' \;
done < new
有什么方法可以调整我的 bash 脚本,使其专门针对 index= 之后的值,而不是 find 命令找到的任何随机句子?
答案1
sed 中的这个正则表达式应该只对以 开头的行进行替换index
。
while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "/^index/s/index=$old/index=$new/g" '{}' \;
done < new