He probado el siguiente código para reemplazar QQ
con 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
sed
ahora intenta reemplazar cada aparición del literal$var1
porZZ
.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 me
será 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
sed
con los siguientes argumentos (suponiendopattern=bert
yfile=text.txt
):Si
file.txt
contienebert
, la salida será:fuente
g
opción, por lo que pasaría en sus,foo,bar,g
lugar.\\0
lugar de\0
hacerlo, no debe hacerlo cuando\0
se incluye entre comillas simples. Desed
lo contrario , sustituirá el patrón por un literal en\0
lugar de la coincidencia completa.Podemos usar variables al
sed
usar 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