sedに変数を渡す

sedに変数を渡す

フォームにシェルsed変数を使用することはできません$NUMBER。私のシェルスクリプトには次の行があります。

cat shared.txt sed 's/whatever1/$2 ... whatever2/' > shared2.txt

結果shared2.txtは次のとおりです。

...$2....

私は何が間違っていましたか?

答え1

一重引用符の代わりに二重引用符を使用してみてください。

sed "s/whatever1/$2 ... whatever2/" shared.txt > shared2.txt

答え2

二重引用符を使用すると効果がありますが、場合によっては目的の結果が得られないことがあります。例えば、

t="bcd"
echo '123$tbcd' | sed "s/$t$t//"

(はい、これは少し人為的なものです!)特定の文字をエスケープすることでこれを防ぐことができます。

echo '123$tbcd' | sed "s/\$t$t//"

しかし、これを見逃すのは簡単です。私の考えでは、最も安全なアプローチは、変数を二重引用符で囲み(スペースがsedコマンドを妨げないように)、残りの文字列を一重引用符で囲むことです(特定の文字をエスケープする必要がないようにするため)。

echo '123$tbcd' | sed 's/$t'"$t"'//'.

関連情報