He probado el siguiente código para reemplazar QQcon ZZ, pero no hago lo que quiero:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Sin embargo, este código hace lo que quiero:
sed -i 's/QQ/ZZ/g' $file
¿Cómo uso las variables en sed?
command-line
bash
sed
Adaptador UA
fuente
fuente

Respuestas:
El shell es responsable de expandir las variables. Cuando utiliza comillas simples para cadenas, su contenido se tratará literalmente, por lo que
sedahora intenta reemplazar cada aparición del literal$var1porZZ.Usando comillas dobles
Use comillas dobles para hacer que el shell expanda las variables mientras conserva los espacios en blanco:
Cuando requiera el carácter de comillas en la cadena de reemplazo, debe precederlo con una barra diagonal inversa que será interpretada por el shell. En el siguiente ejemplo, la cadena
quote meserá reemplazada por"quote me"(el carácter&es interpretado porsed):Usando comillas simples
Si tiene muchos metacaracteres de shell, considere usar comillas simples para el patrón y comillas dobles para la variable:
Observe cómo utilizo
s,pattern,replacement,en lugar des/pattern/replacement/, lo hice para evitar interferencias con el/en\0/.Ejemplo
El shell luego ejecuta el comando anterior
sedcon los siguientes argumentos (suponiendopattern=bertyfile=text.txt):Si
file.txtcontienebert, la salida será:fuente
gopción, por lo que pasaría en sus,foo,bar,glugar.\\0lugar de\0hacerlo, no debe hacerlo cuando\0se incluye entre comillas simples. Desedlo contrario , sustituirá el patrón por un literal en\0lugar de la coincidencia completa.Podemos usar variables al
sedusar comillas dobles:Si tiene una barra diagonal
/en la variable, use un separador diferente, como a continuación:fuente
/en la variable => ¡Esto me salvó! Mi variable es una url y contiene/. Cambiar a usar|como separador solucionó mi problema