web-dev-qa-db-ja.com

Sed bashスクリプト内で機能していません

これは簡単な質問かもしれないと思いますが、私はどこを見てもいくつかの回避策を試しましたが、まだ問題を解決していません。

問題の説明:ファイル内の文字を置き換える必要があり、コマンドラインを使用して簡単に置き換えることができます。

sed -e 's/pattern1/pattern2/g' full_path_to_file/file

しかし、bashスクリプト内で同じ行を使用すると、それを置き換えることができないようで、エラーメッセージは表示されず、置換されていないファイルの内容だけが表示されます。

#!/bin/sh

VAR1="patter1"
VAR2="patter2"

VAR3="full_path_to_file"

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3}

どんな助けでもいただければ幸いです。

どうもありがとうございました。

15
Isabelle

試してみてください

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3}

Bashリファレンス 言います:

文字「$」と「 `」は、二重引用符で囲まれた特別な意味を保持します

したがって、それはあなたの変数を解決することができるでしょう

29
Dmitry Yudakov

私はあなたのようなスクリプトを使用しています...そして私のものも同様に機能します!

#!/bin/sh

var1='pattern1'
var2='pattern2'

sed -i "s&$var1&$var2&g" *.html

ほら、私の使用する「-i」...そして私が使用する区切り文字「&」はあなたのものとは異なります。区切り文字「&」は、AT PATTERNを持たない他の文字を使用できます。

次を使用できます。

sed -i "s#$var1#$var2#g" *.html

sed -i "s@$var1@$var2@g" *.html

.。

私のパターンが「[email protected]」の場合、もちろん「#」、「%」などの別の区切り文字を使用する必要があります...わかりましたか?