Экранирование нескольких обратных кавычек в вызове 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'

Связанный контент