Bash

使用 while 循環從位於另一個文件中的變數中查找 sed 匹配項

  • November 14, 2022

我這裡有數千個文件,我必須對其進行替換。所以我正在嘗試創建一個 bash 程序,它將遍歷所有舊變數並用新變數替換它們。所以這就是我目前所擁有的。

例如,我有一個包含所有舊變數和新變數的文件:所以我需要用第二個值替換第一個值。我已將此文件命名為新的。

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

這確實有效。它用新值替換舊值。但是在 savedsearches.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 命令找到的任何隨機句子?

sed 中的這個正則表達式應該只對以index.

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "/^index/s/index=$old/index=$new/g" '{}' \; 
done < new

引用自:https://unix.stackexchange.com/questions/724844