Bash
使用 while 循環從位於另一個文件中的變數中查找 sed 匹配項
我這裡有數千個文件,我必須對其進行替換。所以我正在嘗試創建一個 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