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 sed
script, 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'