1

名前=値の形式で、Java プロパティ ファイルに変数を代入するスクリプトを作成しています。次のようなソース ファイル source.env があります。

TEST_ENV_1=test environment variable one
TEST_ENV_2=http://test.environment.com/one
#this is a comment with an equal sign=blah
TEST_ENV_3=/var/log/test/env/2.log

私のスクリプトは、ファイル dest.env 内のすべての TEST_ENV_1 を「テスト環境変数 1」などに置き換えます。

一度に 1 行ずつ処理しようとしていますが、sed や grep などのコマンドからの出力をループすると、行全体ではなく空白がトークン化されるため、問題が発生します。

$ for i in `sed '/^ *#/d;s/#.*//' source.env`; do
  echo $i
  done
TEST_ENV_1=test
environment
variable
one
TEST_ENV_2=http://test.environment.com/one
TEST_ENV_3=/var/log/test/env/2.log

それらを線として扱うにはどうすればよいですか?私ができるようにしたいのは、「=」記号で各行を分割し、source.env ファイルに基づいて一連の置換正規表現を使用して sed スクリプトを作成することです。

4

1 に答える 1

5
sed '/^ *#/d;s/#.*//' source.env | while read LINE; do
  echo "$LINE"
done

$IFS別の方法は、 @Jim の回答に従って変更することです。この場合、バッククォートを使用するとファイル全体が一度に読み込まれるため、回避することをお勧めします。一方、sed の出力をwhile上記にパイプすると、ファイル全体をメモリに読み込まずに 1 行ずつ処理できます。

于 2009-10-29T22:45:31.580 に答える