1. ホーム
  2. linux

[解決済み] 複雑なテキストファイルでシェル変数を置換する方法

2022-03-05 11:53:10

質問

いくつかのテキストファイルにシェル変数(例えば$VAR1や$VAR2)を導入しています。

これらのファイルを(1つずつ)取り出して、すべての変数を置き換えた新しいファイルに保存したいと思います。

これを行うには、以下のシェルスクリプトを使用しました(StackOverflowで発見)。

while read line
do
    eval echo "$line" >> destination.txt
done < "source.txt"

これは非常に基本的なファイルに対して非常によく機能します。

しかし、より複雑なファイルでは、"eval" コマンドはあまりにも多くのことを行います。

  • で始まる行はスキップされます。

  • XMLファイルのパースで大量のエラーが発生する

何か良い方法はないでしょうか?(シェルスクリプトで...例えばAntで簡単にできるのは知っています)。

よろしくお願いします。

解決方法は?

見ると、私のシステムには envsubst コマンドは、gettext-base パッケージの一部です。

これで簡単にできるんですね。

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

もし、同じファイルを両方に使いたい場合は、moreutil の sponge というのは、Johnny Utahhが提案したとおりです。 envsubst < "source.txt" | sponge "source.txt" . (シェルのリダイレクトでは、読み込む前にファイルを空にしてしまうため)。