スクリプト内で単純な検索と置換を作成する方法はありbash
ますが、置換は PHP スクリプトを実行することによって行われます。
たとえば、ファイル内の: を見つけ{{KEY}}
て、: の出力に置き換える必要があります。これを達成できますか?php -f generate_key.php
app.config
sed
上記のsedベースのソリューションの代わりに、これらの方針に沿って何かを提案したいと思います。
KEY="$(php -f generate_key.php)" awk '{gsub("{{KEY}}", ENVIRON["KEY"]);print;}' < app.config > app.config.new && \
mv app.config.new app.config
(T + 20hで編集され、後者のエスケープシーケンスの処理ENVIRON
のために代わりに使用されます)awk -v VAR=VAL
VAL
主な理由は、phpスクリプトの出力に解釈や変換を適用せずに置換を実行するためです。
PHPスクリプトの出力にスラッシュが含まれている場合、sedベースのソリューションは失敗します。また、PHPスクリプトの出力に存在するさまざまなエスケープ文字(\n
s、\t
sなど)が置き換えられますが、これはおそらく必要なものではありません。 。
これを試してください
sed -e "s/{{KEY}}/`php -f generate_key.php`/g" app.config
これにより、置換文字列が PHP スクリプトの出力に置き換えられます。app.config をその場で変更する場合-i
は、コマンド ラインにオプションを追加します。
sed -i -e "s/{{KEY}}/`php -f generate_key.php`/g" app.config
@je4d が観察したように、の出力にgenerate_key.php
スラッシュが含まれている場合は/
、代わりに別の区切り文字を使用する必要があります。たとえば、
sed -e "s;{{KEY}};`php -f generate_key.php`;g" app.config
試す:
cat app.config|sed 's/{{KEY}}/something/g'