web-dev-qa-db-ja.com

変数をsedに渡す

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

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

shared2.txtの結果は次のようになります。

...$2....

何を間違えたのですか?

11
user2013619

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

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

二重引用符を使用しても問題はありませんが、これでは期待どおりの結果にならない場合があります。例えば、

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

(はい、これは多少不自然です!)これは、特定の文字をエスケープすることで回避できます。

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

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

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