GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo uso sed para cambiar mis archivos de configuración, con claves y valores flexibles?

sed -i -e '/central\.database =/ s/= .*/= new_value/' /path/to/file

Explicación:

  • -i le dice a sed que guarde los resultados en el archivo de entrada. Sin él, sed imprimirá los resultados en la salida estándar.
  • /central\.database =/ coincide con las líneas que contienen la cadena entre barras:central.database = . El . se escapa ya que es un carácter especial en expresiones regulares.
  • El s/OLD/NEW/ parte realiza un s sustitución La cadena OLD es una expresión regular para hacer coincidir y el NEW parte es la cadena a sustituir.
  • En expresiones regulares, .* significa "coincidir con cualquier cosa". Entonces = .* coincide con un signo igual, un espacio y luego cualquier otra cosa.

Aquí hay una expresión de ejemplo:

sed -i 's/^\(central\.database\s*=\s*\).*$/\1SQLTEST/' file.cfg

Si quieres hacer coincidir cosas con / en él, puede usar otro delimitador:

sed -i 's#^\(cent/ral\.data/base\s*=\s*\).*$#\1SQL/TEST#' file.cfg

O con expansión variable:

VAL="SQLTEST"
sed -i "s/^\(central\.database\s*=\s*\).*\$/\1$VAL/" file.cfg

En tu ejemplo:

sshRetValue=`sed -i "s/^\(\1$CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt`;

Hay un \1 antes de $CENTRAL_DB_NAME que no es válido. Además, sed no imprime su valor de retorno. Esta es la forma preferida de comprobar los valores devueltos:

sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
sed_return_value=$?

Y finalmente canalizar a ssh (no probado):

sed_return_value=$(ssh server <<EOF
    sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
    echo $?
EOF
)

El -i es para reemplazar datos en el archivo de entrada. De lo contrario, sed escribe en stdout.

Las expresiones regulares son un campo propio. Sería imposible explicarlos en profundidad en una respuesta de stackoverflow, a menos que haya alguna función específica que se te escape.


Linux
  1. Cómo encontrar archivos de configuración de MySQL, PHP y Apache

  2. Cómo encontrar archivos con permisos SUID y SGID en Linux

  3. Cómo usar el comando Sed en Linux con ejemplos

  4. Cómo encontrar archivos grandes de Linux con los comandos find y du

  5. ¿Cómo cambiar un archivo en el lugar usando awk? (como con sed -i)

Cómo usar el comando cp para copiar archivos y directorios

Cómo usar el comando gunzip de Linux con ejemplos

Cómo usar el comando SED para buscar y reemplazar cadenas en archivos

Cómo instalar y usar Alpine con Gmail IMAP en Linux

Esquemas de color en Vim:cómo cambiarlos y usarlos

Cómo usar Sed para buscar y reemplazar una cadena en un archivo