Escapar de múltiples comillas invertidas en una llamada sed

Escapar de múltiples comillas invertidas en una llamada sed

Necesito realizar búsqueda y reemplazo de forma iterativa en varias declaraciones SQL:

De:

CREATE TABLE `Old_Name` (

A:

ALTER TABLE `Old_Name` RENAME TO `New_Name`

La consulta anterior contiene comillas invertidas `. Intenté hacer lo siguiente

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

En su lugar, crea una entrada en la línea de comando. Pero si agrego un espacio detrás $replacement, se ejecuta normalmente. Pero no quiero el espacio después New_Name.

Tenga en cuenta que no sé si esto realmente se debe a las comillas invertidas o podría ser un problema de interpolación de nombres de variables. Independientemente del caso, ¿cómo puedo solucionar este problema?

Respuesta1

Para reducir el escape al mínimo, sugiero utilizar comillas simples con sed, como en

sed 's/pattern/repl/g'

(entre comillas simples puedes utilizar libremente la comilla grave sin ningún miedo y sin escapar).
Si necesita utilizar una variable de shell en el sedscript, coloque comillas simples y dobles como en el siguiente ejemplo.

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

eso podría verse mejor como la siguiente concatenación

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

información relacionada