GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man Shell-Variablen in komplexen Textdateien ersetzt

Ich weiß, dass dieses Thema alt ist, aber ich habe eine einfachere Arbeitslösung, ohne die Variablen zu exportieren. Kann ein Einzeiler sein, aber ich trenne lieber mit \ am Zeilenende.

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

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

Die Variablen müssen in derselben Zeile wie envsubst definiert werden ist als Umgebungsvariable zu berücksichtigen.

Die '$var1,$var3' ist optional, nur die angegebenen zu ersetzen. Stellen Sie sich eine Eingabedatei vor, die ${VARIABLE_USED_BY_JENKINS} enthält die nicht ersetzt werden sollten.


In Bezug auf Antwort 2 haben Sie bei der Erörterung von envsubst gefragt:

Wie kann ich es mit den in meinem .sh-Skript deklarierten Variablen zum Laufen bringen?

Die Antwort ist, dass Sie einfach Ihre Variablen exportieren müssen, bevor Sie envsubst aufrufen .

Sie können auch die Variablenzeichenfolgen, die Sie ersetzen möchten, in der Eingabe mit envsubst einschränken SHELL_FORMAT -Argument (um das unbeabsichtigte Ersetzen einer Zeichenfolge in der Eingabe durch einen gemeinsamen Shell-Variablenwert zu vermeiden - z. B. $HOME ).

Zum Beispiel:

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

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

Ersetzt alle Instanzen von $VAR1 und $VAR2 (und nur VAR1 und VAR2 ) in source.txt mit 'somevalue' und 'someothervalue' bzw..


Es stellt sich heraus, dass auf meinem System ein envsubst vorhanden ist Befehl, der Teil des Pakets gettext-base ist.

So wird es einfach:

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

Beachten Sie, wenn Sie dieselbe Datei für beide verwenden möchten, müssen Sie so etwas wie sponge von moreutil verwenden , wie von Johnny Utahh vorgeschlagen:envsubst < "source.txt" | sponge "source.txt" . (Weil die Shell-Weiterleitung sonst die Datei vor dem Lesen leert.)


Linux
  1. So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

  2. So fügen Sie Textdateien unter Linux Zeilennummern hinzu

  3. So verbinden Sie zwei Textdateien unter Linux

  4. Wie ändere ich die Erweiterung mehrerer Dateien?

  5. So finden Sie Dateien mit dem fd-Befehl in Linux

So verwenden Sie Variablen in Shell-Skripten

Wie man Textdateien unter Linux vergleicht und zusammenführt

Wie man Textdateien unter Linux vergleicht und zusammenführt (Teil 2)

So verwenden Sie den cp-Befehl zum Kopieren von Dateien und Verzeichnissen

So leiten Sie die Shell-Befehlsausgabe um

Bash-Scripting:So schreiben Sie Daten in Textdateien