sedの代替エントリ内でキャプチャされた式の評価

sedの代替エントリ内でキャプチャされた式の評価

展開スクリプトを開発しており、構成ファイル内のデータベース(または他のシステム)資格情報を置き換える必要があります。

次の資格情報を含むPHPファイルがあります。

<?php

return [
    'mysql-rw' => [
      'dns' => 'mysql-rw.local',
      'user' => 'local',
      'password' => 'PASS__LABELONE__',
    ],
    'mysql-ro' => [
      'dns' => 'mysql-ro.local',
      'user' => 'local',
      'password' => 'PASS__LABELTWO__',
    ],
];

LABELONEまた、CIサーバーにBash環境変数が設定されています。ファイルのテンプレートを1行のコマンドに置き換えたいLABELTWOのですが、エラーまたは代替エラーがあります。sed

LABELONE=pass1 LABELTWO=pass2 sed -r "s/PASS__(.+)__/${!\1}/" tst.txt 
bash: s/PASS__(.+)__/${!\1}/: bad substitution

私のアプローチは次のとおりです。

  1. ファイル内のテンプレートを探す
  2. タグをキャプチャします(PASS__LBL__ではLBLです)。
  3. テンプレートをenvに置き換えます。変数($ LBL)

そのような動的変数をどのように評価できますかsed?それとも非現実的なものですか?

ベストアンサー1

Perlは%ENVハッシュを介してenv変数にアクセスできます。

LABELONE=pass1 LABELTWO=pass2 perl -pe 's/PASS__(.+)__/$ENV{$1}/' -- tst.txt

おすすめ記事