このファイルがあり、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
実際に…というラッパーがあります。yq
jq
YAML入力のように使用できます。ディストリビューションに含まれていないようです。とにかく、このPythonコマンドをビルドしてインストールすると(jq
広く利用可能な強制ツールと共に)、それに応じてYAMLファイルを解析できます。これにより、当然コメントは無視されます。
yq -r '.metal.children.masters.hosts[].ansible_host' < myfile.yaml
構文が有効な限り、マスターから IP アドレスをダンプします。