YAMLファイルからいくつかのIPアドレスを抽出する方法

YAMLファイルからいくつかのIPアドレスを抽出する方法

このファイルがあり、masters/hostsそのセクションの下のすべてのIPアドレスを選択したいです(該当する行がある場合)。いいえコメントしました。私はこれを試しましたが、sed 's/.*\ \([0-9\.]\+\).*/\1/g'成功しませんでした。

metal:
  children:
    masters:
      hosts:
        dev0: {ansible_host: 172.168.1.10}
        # dev1: {ansible_host: 185.168.1.11}
        # dev2: {ansible_host: 142.168.1.12}
    workers:
      hosts: {}
        # dev3: {ansible_host: 172.168.1.13}

ベストアンサー1

JSONを使用するのと同じ方法で、シェルで適切なツールを使用することをお勧めします。jq、YAMLのための同様のツールがあるとしたらどうでしょうか?

jq実際に…というラッパーがあります。yqjqYAML入力のように使用できます。ディストリビューションに含まれていないようです。とにかく、このPythonコマンドをビルドしてインストールすると(jq広く利用可能な強制ツールと共に)、それに応じてYAMLファイルを解析できます。これにより、当然コメントは無視されます。

yq -r '.metal.children.masters.hosts[].ansible_host' < myfile.yaml

構文が有効な限り、マスターから IP アドレスをダンプします。

おすすめ記事