まず、bash スクリプトには特殊文字を含む変数があります。次に例を示します。list.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 (Oliv による回答):
var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
結果は同じです: パスワード = 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
、2 つ&
が一致した文字列になります。
私が言いたいもう1つの点は、本当に個人的な好みですが、find ... -exec
with を使用する場合{}
、この構文は好きではないので、通常は次のように終了します。\;
私はxargsを使うのが好きです
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
末尾の g は、見つかった回数だけ置き換えられることに注意してください...
また、これは明らかかもしれません。サブツリーにファイルがいくつあるかはわかりませんlist.txt
が、1 つしかない場合は、 は必要ありませんfind
。
sed -i 's/pattern/replacement/options' filename