デフォルトでは、以下を実行する構成スクリプトがあります。
#!/bin/bash
source vars.sh
cat >foo.output <<EOF
# some static stuff (many lines...)
variable_bit=($SOME_VAR, $SOME_OTHER_VAR, ...)
# some more static stuff (many lines...)
EOF
foo.output.template
次のような他のファイルを持つ方が良いでしょう。
# some static stuff (many lines...)
VARIABLE_BIT
# some more static stuff (many lines...)
私の設定スクリプトは次のことを行うことができます。
sed 's/VARIABLE_BIT/<<STDIN>>/' foo.output.template >foo.output <<EOF
variable_bit=($SOME_VAR, $SOME_OTHER_VAR, ...)
EOF
これはうまくいきません。これが可能かどうかはわかりませんが、sed
目的は次のとおりです。
- foo.output.templateを読む
- マッチ
VARIABLE_BIT
- 標準入力の他のものに置き換えてください。
- 次に、foo.outputにパイプします。
sed
、awk
またはこれを簡単に実行できる他の一般的な* nixユーティリティはありますか?
答え1
少なくともGNUがある場合sed
、
$ cat foo.output.template
# some static stuff (many lines...)
VARIABLE_BIT
# some more static stuff (many lines...)
そして
$ cat bar
hello
hello
VARIABLE_BIT
その後、内容を一致させ、読み取り、挿入してbar
から削除できますVARIABLE_BIT
。
$ cat bar | sed '/^VARIABLE_BIT/{
r /dev/stdin
d
}' foo.output.template
# some static stuff (many lines...)
hello
hello
# some more static stuff (many lines...)
d
ファイル名の一部として解釈されないように注意している場合は、それを1行のコードに置き換えることができます。
cat bar | sed -e '/^VARIABLE_BIT/{r /dev/stdin' -e 'd;}' foo.output.template
通常の方法で出力ファイルにリダイレクトします。つまり、> foo.output
cat bar
注:本当に使用したい場合はstdinを説明します。文書代替テキストの場合は、これを直接実行できます。
sed -e '/^VARIABLE_BIT/{r bar' -e 'd;}' foo.output.template > foo.output
答え2
テンプレートを変数セクションの前と変数セクションの後に1つずつ2つのファイルに分割できませんか?その後、シェルは次のように接続できます。
( cat foo.output.template.before; cat ; cat foo.output.template.after; ) >foo.output
答え3
cat before.input - after.input >output <<EOF
whatever $FOO $BAR
EOF