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}
与处理 JSON 的方式相同,在 shell 中使用适当的工具可以更好地处理:
jq
如果有类似的 YAML 工具怎么办?实际上有一个
jq
名为 ... 的包装器yq
,可以像jq
YAML 输入一样使用。它似乎没有打包在发行版中。无论如何,一旦构建并安装了这个 python 命令(沿着jq
广泛可用的强制性工具),现在可以相应地解析 YAML 文件,因为它自然会忽略注释。只要语法有效,它将转储主服务器中的 IP 地址。
一个
sed
解决方案:以多行方式:
该
sed
cmd 执行以下操作:或者,在
awk
:使用
perl
和YAML
模块:如果您的版本不支持,请使用
%{$h{$_}}
而不是。$h{$_}->%*
perl