unix shell-script – ¿Cambiar un valor en un archivo de configuración o agregar la configuración si no existe?

Pregunta:

Cuando modifico archivos de configuración desde la línea de comando, a menudo quiero encontrar la configuración en el archivo de configuración y modificar esa línea si esa configuración existe. Si esa configuración no existe, quiero agregarla al final del archivo.

Termino haciendo algo como:

if [ `grep -c '^setting=' example.conf` == 0 ]
then 
    echo "setting=value" >> example.conf
else 
    sed -i 's/^setting=.*/setting=value/g' example.conf
fi

Lo que parece una gran cantidad de código para algo tan simple. Esto ni siquiera hace cosas básicas como verificar que el archivo de configuración ya termine en una nueva línea antes de agregarlo. Seguramente hay una utilidad que hace esto, o un comando más simple que puedo usar.

Respuesta:

La lógica adicional podría manejarse con awk .

BEGIN { FS = OFS = "=" }
$1 == "setting" { $2 = "value"; found=1 }
{print}
END { if (!found) { print "setting=value" }

Si la propiedad no se encuentra al final, no se establecerá found y la cláusula END agregará la nueva línea de configuración. El FS=OFS= asegura el mismo formato y la impresión siempre enviará una nueva línea (ORS) incluyendo la última línea. Las líneas en blanco y los comentarios se pasarán sin cambios.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım