GNU/Linux >> Znalost Linux >  >> Linux

Jak nahradit proměnné shellu ve složitých textových souborech

Vím, že toto téma je staré, ale mám jednodušší pracovní řešení bez exportu proměnných. Může být jednolinkový, ale já dávám přednost rozdělení pomocí \ on line end.

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

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

Proměnné je třeba definovat na stejném řádku jako envsubst je být považován za proměnné prostředí.

'$var1,$var3' je volitelná pouze pro nahrazení specifikovaných. Představte si vstupní soubor obsahující ${VARIABLE_USED_BY_JENKINS} který by neměl být nahrazen.


S odkazem na odpověď 2 jste se při diskuzi o envsubst zeptali:

Jak mohu zajistit, aby to fungovalo s proměnnými, které jsou deklarovány v mém skriptu .sh?

Odpověď je, že před voláním envsubst jednoduše musíte exportovat své proměnné .

Řetězce proměnných, které chcete nahradit ve vstupu, můžete také omezit pomocí envsubst SHELL_FORMAT argument (aby se zabránilo nechtěnému nahrazení řetězce ve vstupu společnou hodnotou proměnné shellu – např. $HOME ).

Například:

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

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

Nahradí všechny výskyty $VAR1 a $VAR2 (a pouze VAR1 a VAR2 ) v source.txt s 'somevalue' a 'someothervalue' respektive.


Když se podívám, ukázalo se, že v mém systému je envsubst příkaz, který je součástí balíčku gettext-base.

Takže to je snadné:

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

Pokud chcete použít stejný soubor pro oba, budete muset použít něco jako sponge od moreutilu , jak navrhl Johnny Utahh:envsubst < "source.txt" | sponge "source.txt" . (Protože přesměrování shellu jinak vyprázdní soubor před jeho čtením.)


Linux
  1. Jak spojit dva textové soubory v Linuxu

  2. Jak nastavit/vytvořit proměnné prostředí a prostředí v Linuxu

  3. Jak změnit příponu více souborů?

  1. Jak najít soubory pomocí příkazu fd v Linuxu

  2. Jak rozeznat binární soubory od textových souborů v linuxu

  3. Jak odstraním nové řádky z textového souboru?

  1. Jak přidat čísla řádků do textových souborů v systému Linux

  2. Nahrazení proměnných prostředí v souboru vlastností

  3. Nahraďte proměnné prostředí v textu, pokud existují