ファイルの内容をコンピュータの現在のIPアドレスに置き換えます。

ファイルの内容をコンピュータの現在のIPアドレスに置き換えます。

yaml設定ファイル(cli.yaml)があります。構造を持っている

database:
  host: "IP"

今、ファイルの内容を置き換えるか、より正確には文字列をIP自分のコンピュータの現在のアドレスに置き換えようとしていますIPV4

ターミナルに上手くいかないので、仕事をいろいろな部分に分けました。

例:IPを取得するには:ipconfig getifaddr en0- IPが次のと仮定します。 -10.0.0.1 今これはAWKファイルの内容をregrex

だから私はこれら2つのコマンドを次のように接続してみました。ipconfig getifaddr en0 | awk '{print $1}'そしてそれはうまくいきました。印刷10.0.0.1

ついに:ipconfig getifaddr en0 | awk '{sub(/IP/,$1)}1' cli.yaml > temp.txt && mv temp.txt cli.yaml

しかし、私が得た結果は次のとおりです。

database:
  host: "host:"

これは私が期待したものではありません。今私は何かが間違っていると思いましたPIPE。だから私は$1代替を使用します$0。しかし、期待した結果はまだ達成されていません。

どのようなヒントがありますか?私は何が間違っていた! !

答え1

あなたは使用を検討することができますyqjq値を更新するためのラッパー:

$ yq -Y --arg ip '10.0.0.1' '.database.host |= $ARGS.named.ip' cli.yaml
database:
  host: "10.0.0.1"

答え2

解決策を見つけましたが、その逆でした。私が使用するのはREGEXstringの代わりですIP

awk -v ip="$(ipconfig getifaddr en0)" \
  '{sub(/((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/,ip)}1' \
  ./config/cli.yaml > temp.txt && mv temp.txt ./config/cli.yaml

関連情報