GNU/Linux >> Tutoriels Linux >  >> Linux

Comment substituer des variables shell dans des fichiers texte complexes

Je sais que ce sujet est ancien, mais j'ai une solution de travail plus simple sans exporter les variables. Peut être un oneliner, mais je préfère diviser en utilisant \ en fin de ligne.

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

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

Les variables doivent être définies sur la même ligne que envsubst est d'être considéré comme des variables d'environnement.

Le '$var1,$var3' est facultatif pour ne remplacer que ceux spécifiés. Imaginez un fichier d'entrée contenant ${VARIABLE_USED_BY_JENKINS} qui ne doit pas être remplacé.


En référence à la réponse 2, lors de la discussion envsubst, vous avez demandé :

Comment puis-je le faire fonctionner avec les variables déclarées dans mon script .sh ?

La réponse est que vous avez simplement besoin d'exporter vos variables avant d'appeler envsubst .

Vous pouvez également limiter les chaînes de variables que vous souhaitez remplacer dans l'entrée en utilisant le envsubst SHELL_FORMAT argument (évitant le remplacement involontaire d'une chaîne dans l'entrée par une valeur de variable shell commune - par exemple $HOME ).

Par exemple :

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

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

Remplacera toutes les instances de $VAR1 et $VAR2 (et seulement VAR1 et VAR2 ) en source.txt avec 'somevalue' et 'someothervalue' respectivement.


En regardant, il s'avère que sur mon système il y a un envsubst commande qui fait partie du package gettext-base.

Alors, c'est plus facile :

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

Notez que si vous souhaitez utiliser le même fichier pour les deux, vous devrez utiliser quelque chose comme sponge de moreutil , comme suggéré par Johnny Utahh :envsubst < "source.txt" | sponge "source.txt" . (Parce que la redirection du shell videra autrement le fichier avant sa lecture.)


Linux
  1. Comment joindre deux fichiers texte sous Linux

  2. Comment rechercher des fichiers avec la commande fd sous Linux

  3. Comment distinguer le binaire des fichiers texte sous Linux

  4. Comment supprimer les retours à la ligne d'un fichier texte ?

  5. Remplacement des variables d'environnement dans un fichier de propriétés

Comment utiliser des variables dans les scripts Shell

Comment comparer et fusionner des fichiers texte sous Linux

Comment comparer et fusionner des fichiers texte sous Linux (partie 2)

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment rediriger la sortie de la commande shell

Script bash :comment écrire des données dans des fichiers texte