Mehrere Backticks in einem Sed-Aufruf maskieren

Mehrere Backticks in einem Sed-Aufruf maskieren

Ich muss die Suche und Ersetzung iterativ in mehreren SQL-Anweisungen durchführen:

Aus:

CREATE TABLE `Old_Name` (

Zu:

ALTER TABLE `Old_Name` RENAME TO `New_Name`

Die obige Abfrage enthält Backticks `. Ich habe Folgendes versucht

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

Stattdessen wird in der Befehlszeile ein Enter erstellt. Wenn ich jedoch dahinter ein Leerzeichen einfüge $replacement, wird es normal ausgeführt. Ich möchte jedoch kein Leerzeichen danach New_Name.

Hinweis: Ich weiß nicht, ob dies tatsächlich durch die Backticks verursacht wird oder ob es sich um ein Problem bei der Interpolation von Variablennamen handeln könnte. Wie kann ich dieses Problem unabhängig vom Fall lösen?

Antwort1

Um das Escapen auf ein Minimum zu reduzieren, empfehle ich die Verwendung von einfachen Anführungszeichen sed, wie in

sed 's/pattern/repl/g'

(in einfachen Anführungszeichen können Sie den Backtick ohne Angst und ohne Escapezeichen verwenden).
Wenn Sie Shell-Variablen im Skript verwenden müssen sed, setzen Sie einfache und doppelte Anführungszeichen wie im folgenden Beispiel zusammen

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

das könnte man besser als die folgende Verkettung sehen

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

verwandte Informationen