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.