'特殊文字を含むSedコマンド

'特殊文字を含むSedコマンド

Bashシェルで次のコマンドを実行しようとしています。

sed -i "s/\(update.*\)where /\1 where primary_id = '$primary_id', /" *.php

ご覧のとおり、私はsedを使用して変数を挿入しています'$primary_id'。コマンドの実行後に表示されたが欠落している'こと$primary_idを確認しました。

たとえば、特殊文字を処理する方法は '

ベストアンサー1

これをもう少し簡単にしましょう。a'$b'dollar、ab)の各項目を一重引用符で置き換えようとします。c$b変数に発生する拡張は望むものではありません。

b=c
sed -i "s/a/'$b'/g" *.php

上記のコマンドは、質問で実行したコマンドと似ています。文字列s/a/'$b'/gが二重引用符で囲まれているため、変数が拡張されて文字列が'c'

コマンドsed全体を二重引用符で囲んだ場合は、エスケープする必要があります$。解決策は次のとおりです。

sed -i "s/a/'\$b'/g" *.php\

別の可能性は、シェルに特別な意味を持つ文字を除いて何も引用しないことです(推奨されませんが、潜在的に洞察力があります)。

sed -i s/a/\'\$b\'/g *.php

おすすめ記事