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.