Bash 腳本上的 SED:如何用來自 Bash 腳本變數的特殊字元替換文本

Bash 腳本上的 SED:如何用來自 Bash 腳本變數的特殊字元替換文本

首先,bash 腳本中有一個包含特殊字元的變數。這是例子。清單.txt:

user = root
password = 1234

bash腳本:

#!/bin/sh
var1 = var&2018+&
find . -name "list.txt" -exec sed -i "s/1234/"$var1"/g" {} +

當我執行腳本時,結果是:var12342018+1234。

更新1(奧利佛回答):

var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;

結果仍然是:password = var12342018+1234

也許任何人都可以幫助我。謝謝

答案1

首先你需要引用你的var1變數。

bash -c您可以在命令中使用find,以便將密碼作為變數給出:

 var1='var\&2018+\&'
 find . -name "list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;

答案2

它可能會幫助您理解您必須知道的問題,即&代表正規表示式整個匹配的特殊字元。

由於1234找到了,您將其替換為var12342018+1234,兩者&將成為匹配的字串。

我想說的另一點確實是個人喜好,但是使用find ... -execwith 時{},我不喜歡這種語法,我通常以\;

我更喜歡使用 xargs

find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'

請注意,結尾的 g 會在找到後多次替換它...

這也可能是顯而易見的..我不知道list.txt你的子樹中有多少文件,但如果你只有一個,你就不需要find

sed -i 's/pattern/replacement/options' filename

相關內容