GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo sustituir variables de shell en archivos de texto complejos

Sé que este tema es antiguo, pero tengo una solución de trabajo más simple sin exportar las variables. Puede ser una sola línea, pero prefiero dividir usando \ al final de la línea.

var1='myVar1'\
var2=2\
var3=${var1}\
envsubst '$var1,$var3' < "source.txt" > "destination.txt"

#         ^^^^^^^^^^^    ^^^^^^^^^^     ^^^^^^^^^^^^^^^
# define which to replace   input            output

Las variables deben definirse en la misma línea que envsubst es ser considerado como variables de entorno.

El '$var1,$var3' es opcional reemplazar solo los especificados. Imagine un archivo de entrada que contenga ${VARIABLE_USED_BY_JENKINS} que no debe ser reemplazado.


En referencia a la respuesta 2, al hablar sobre envsubst, usted preguntó:

¿Cómo puedo hacer que funcione con las variables declaradas en mi script .sh?

La respuesta es que simplemente necesita exportar sus variables antes de llamar a envsubst .

También puede limitar las cadenas de variables que desea reemplazar en la entrada usando el envsubst SHELL_FORMAT argumento (evitando el reemplazo no deseado de una cadena en la entrada con un valor de variable de shell común, por ejemplo, $HOME ).

Por ejemplo:

export VAR1='somevalue' VAR2='someothervalue'
MYVARS='$VAR1:$VAR2'

envsubst "$MYVARS" <source.txt >destination.txt

Reemplazará todas las instancias de $VAR1 y $VAR2 (y solo VAR1 y VAR2 ) en source.txt con 'somevalue' y 'someothervalue' respectivamente.


Mirando, resulta que en mi sistema hay un envsubst comando que es parte del paquete gettext-base.

Entonces, esto lo hace fácil:

envsubst < "source.txt" > "destination.txt"

Tenga en cuenta que si desea usar el mismo archivo para ambos, tendrá que usar algo como sponge de moreutil , según lo sugerido por Johnny Utahh:envsubst < "source.txt" | sponge "source.txt" . (Debido a que la redirección de shell vaciará el archivo antes de leerlo).


Linux
  1. Cómo unir dos archivos de texto en Linux

  2. Cómo encontrar archivos con el comando fd en Linux

  3. Cómo distinguir binarios de archivos de texto en Linux

  4. ¿Cómo elimino líneas nuevas de un archivo de texto?

  5. Sustitución de variables de entorno en un archivo de propiedades

Cómo usar variables en secuencias de comandos de Shell

Cómo comparar y fusionar archivos de texto en Linux

Cómo comparar y fusionar archivos de texto en Linux (parte 2)

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

Cómo redirigir la salida del comando de shell

Bash scripting:cómo escribir datos en archivos de texto