Saltar al contenido

Modificar el archivo de configuración usando el script bash

El paso a paso o código que hallarás en este post es la resolución más fácil y válida que hallamos a esta duda o problema.

Solución:

Una puñalada salvaje en la oscuridad para modificar un solo valor:

sed -c -i "s/($TARGET_KEY *= *).*/1$REPLACEMENT_VALUE/" $CONFIG_FILE

suponiendo que el objetivo key y el valor de reemplazo no contienen ningún carácter especial de expresión regular, y que su key-el separador de valor es “=”. Tenga en cuenta que la opción -c depende del sistema y es posible que deba omitirla para que se ejecute sed.

Para obtener otros consejos sobre cómo hacer reemplazos similares (p. ej., cuando REPLACEMENT_VALUE tiene caracteres ‘/’), hay algunos excelentes ejemplos aquí.

Espero que esto ayude a alguien. Creé un script autónomo, que requería un tipo de procesamiento de configuración.

#!/bin/bash
CONFIG="/tmp/test.cfg"

# Use this to set the new config value, needs 2 parameters. 
# You could check that $1 and $2 is set, but I am lazy
function set_config()
    sudo sed -i "s/^($1s*=s*).*$/1$2/" $CONFIG


# INITIALIZE CONFIG IF IT'S MISSING
if [ ! -e "$CONFIG" ] ; then
    # Set default variable value
    sudo touch $CONFIG
    echo "myname="Test"" | sudo tee --append $CONFIG
fi

# LOAD THE CONFIG FILE
source $CONFIG

echo "$myname" # SHOULD OUTPUT DEFAULT (test) ON FIRST RUN
myname="Erl"
echo "$myname" # SHOULD OUTPUT Erl
set_config myname $myname # SETS THE NEW VALUE

Suponiendo que usted tiene un archivo de key=value pares, potencialmente con espacios alrededor del =puede eliminar, modificar en el lugar o agregar key-valor pares a voluntad usando awk Incluso si los keys o los valores contienen secuencias especiales de expresiones regulares:

# Using awk to delete, modify or append keys
# In case of an error the original configuration file is left intact
# Also leaves a timestamped backup copy (omit the cp -p if none is required)
CONFIG_FILE=file.conf
cp -p "$CONFIG_FILE" "$CONFIG_FILE.orig.`date "+%Y%m%d_%H%M%S"`" &&
awk -F '[ t]*=[ t]*' '$1=="keytodelete"  next  $1=="keytomodify"  print "keytomodify=newvalue" ; next   print  END  print "keytoappend=value" ' "$CONFIG_FILE" >"$CONFIG_FILE~" &&
mv "$CONFIG_FILE~" "$CONFIG_FILE" ||
echo "an error has occurred (permissions? disk space?)"

Si estás de acuerdo, tienes el poder dejar un escrito acerca de qué le añadirías a este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *