我有这个文件,如果没有注释该行,我想选择该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}
Run Code Online (Sandbox Code Playgroud)
A.B*_*A.B 14
与处理 JSON 的方式相同,在 shell 中使用适当的工具可以更好地处理:jq
,如果有一个类似的 YAML 工具怎么办?
实际上有一个jq
名为...的包装器yq
,可以像 YAML 输入一样使用jq
。它似乎没有打包在发行版中。无论如何,一旦构建并安装了这个 python 命令(以及jq
广泛可用的强制工具),现在就可以相应地解析 YAML 文件,因为它自然会忽略注释。
yq -r '.metal.children.masters.hosts[].ansible_host' < myfile.yaml
Run Code Online (Sandbox Code Playgroud)
只要语法有效,它将转储 master 中的 IP 地址。