linux - sustituir - ¿Cómo usar sed para reemplazar la variable de un archivo de configuración?
sed linux reemplazar (5)
He estado buscando esta respuesta en línea y parece que no puedo encontrarla.
Tengo un archivo de configuración que contiene:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
Y quiero cambiar el valor de VAR5 de VALUE5 a VALUE10. Lamentablemente, no conozco el valor de VALUE5, así que no puedo buscarlo. Entonces, básicamente necesito usar sed (o lo que sea) para reemplazar el valor de VAR5 por cualquier valor con el que quiera reemplazarlo.
Aunque la respuesta se ha agregado a la pregunta. Pasé algún tiempo sobre cómo funciona, me gustaría agregar algunos hechos y mi versión de la respuesta,
sed -i ''s,^/(THISISMYVARIABLE[ ]*=/).*,/1''THISISMYVALUE'',g'' config.cfg
Explicación:
- Como básico de
sed ''s/find_this/replace_with/''
, estamos diciendo sed para buscar y reemplazar. También recuerde que hay muchos otros delimitadores que podemos usar en lugar de/
. Aquí,
se usa. - Aquí encontramos la línea que coincide con
^/(THISISMYVARIABLE[ ]*=/).*
. Esto significa que estamos agrupando la coincidenciaTHISISMYVARIABLE[ ]*=
. ([ ]*
para cubrir si hay espacios después de la tecla) - En la sección de reemplazo
/1
hay una retrospectiva. Somos referencia del primer grupo en la expresión regular que usamos para el partido.
Pruebe lo siguiente
sed -r ''s / ^ (VAR5 =). * / / 1REPLACEMENT /''
El valor de VAR5 se reemplazará por REEMPLAZO.
Puedes decir:
sed ''/^VAR5=/s/=.*/=VALUE10/'' filename
Para realizar cambios en el archivo in situ , use la opción -i
:
sed -i ''/^VAR5=/s/=.*/=VALUE10/'' filename
Puedes probar este sed:
sed -i.bak ''s/^/(VAR5=/).*//1VALUE10/'' file
Da:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
sed ''//(^VAR5=/).*/ s///1VALUE10/'' YourFile
Debajo de AIX / KSH
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
$ sed ''//(^VAR5=/).*/ s///1VALUE10/'' sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
y para reemplazo en archivo
cat <> YourFile | sed ''//(^VAR5=/).*/ s///1VALUE10/''
$ cat <> sample.txt | sed ''//(^VAR5=/).*/ s///1VALUE10/''
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
Para ser compatible con POSIX (sobre sed
, no cat
) (sed --posix
en gnu sed y sed nativo tradicional en sistema no linux)