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
解決策を見つけましたが、その逆でした。私が使用するのはREGEX
stringの代わりです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