sed呼び出しで複数のバックティックをエスケープします。

sed呼び出しで複数のバックティックをエスケープします。

複数のSQL文に対して繰り返し検索を実行して置き換える必要があります。

から:

CREATE TABLE `Old_Name` (

到着する:

ALTER TABLE `Old_Name` RENAME TO `New_Name`

上記のクエリにはバックティックが含まれています`。私は次を試しています

sed -i -r "s/CREATE TABLE \`$search\` \(/ALTER TABLE \`$search\` RENAME TO \`$replacement\`/g" /query.txt;

コマンドラインに入力を生成します。しかし、後ろにスペースを追加すると$replacement正常に動作します。しかし、私は後ろに空白が欲しくありませんNew_Name

ちなみに、これが実際にバッククォートのために発生したのか、変数名の補間の問題が原因であるのかはわかりません。とにかく、この問題をどのように解決できますか?

答え1

エスケープを最小限に抑えるには、単一引用符を使用することをお勧めしますsed

sed 's/pattern/repl/g'

(一重引用符内では心配せずにエスケープせずに自由にバックティックを使用できます。)スクリプトでシェル変数を使用する必要がある
場合は、次の例のように一重引用符と二重引用符を一緒に使用してください。sed

var="bbb"
thing=foo
sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'

これは、次の接続でよりよく考えることができます。

's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'

関連情報