首先,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 ... -exec
with 時{}
,我不喜歡這種語法,我通常以\;
我更喜歡使用 xargs
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
請注意,結尾的 g 會在找到後多次替換它...
這也可能是顯而易見的..我不知道list.txt
你的子樹中有多少文件,但如果你只有一個,你就不需要find
。
sed -i 's/pattern/replacement/options' filename