GNU/Linux >> Linux の 問題 >  >> Linux

複雑なテキスト ファイルでシェル変数を置き換える方法

このトピックが古いことは知っていますが、変数をエクスポートしない、より単純な作業ソリューションがあります。ワンライナーにすることもできますが、\ を使用して分割することを好みます

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

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

変数は envsubst と同じ行に定義する必要があります は環境変数と見なされます。

'$var1,$var3' 指定されたものだけを置き換えるオプションです。 ${VARIABLE_USED_BY_JENKINS} を含む入力ファイルを想像してください


回答 2 に関して、envsubst について話し合うときに、あなたは次のように尋ねました:

<ブロック引用>

.sh スクリプトで宣言されている変数を使用するにはどうすればよいですか?

答えは、 envsubst を呼び出す前に変数をエクスポートするだけです。 .

envsubst を使用して、入力で置換する変数文字列を制限することもできます SHELL_FORMAT 引数 (入力内の文字列が一般的なシェル変数値 (例:$HOME) に意図せず置換されるのを回避します ).

例:

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

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

$VAR1 のすべてのインスタンスを置き換えます および $VAR2 (そして VAR1 のみ と VAR2 ) source.txt'somevalue' で と 'someothervalue'


調べてみると、私のシステムには envsubst があることがわかりました gettext-base パッケージの一部であるコマンド。

したがって、これにより簡単になります:

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

両方に同じファイルを使用する場合は、moreutil の sponge のようなものを使用する必要があります。 、Johnny Utahh の提案:envsubst < "source.txt" | sponge "source.txt" . (そうしないと、シェルのリダイレクトによってファイルが読み取られる前に空になるためです。)


Linux
  1. Grepコマンドを使用してファイル内のテキストを検索する方法

  2. Linuxでファイルを圧縮および解凍する方法

  3. Linuxでテキストファイルからバイナリを見分ける方法

  1. テキスト ファイルから改行を削除するにはどうすればよいですか?

  2. プロパティ ファイル内の環境変数の置き換え

  3. 1 つのテキスト ファイルを複数の *.txt ファイルに分割する方法は?

  1. Linuxでテキストファイルに行番号を追加する方法

  2. Linuxで2つのテキストファイルを結合する方法

  3. Linuxで環境変数とシェル変数を設定/作成する方法