嗨,我想使用 yq 解析服务器名称,问题是每次我都必须指定每个服务器的索引,如果这是一种获取服务器名称的方法而不使用 yq 或任何其他方法指定索引。
╭─hakim🐺imap in ~/notes on main ✘ (origin/main)
╰$ cat /home/hakim/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/original/config.xml | yq -p=xml .domain.server
- name: AdminServer
ssl:
name: AdminServer
listen-port: "7002"
listen-address:
- name: Server_1
machine: Machine_1
listen-port: "7003"
cluster: Cluster_1
listen-address:
jta-migratable-target:
user-preferred-server: Server_1
cluster: Cluster_1
- name: Server_2
machine: Machine_1
listen-port: "7004"
cluster: Cluster_1
listen-address:
jta-migratable-target:
user-preferred-server: Server_2
cluster: Cluster_1
- name: Server_3
machine: Machine_1
listen-port: "7005"
cluster: Cluster_1
listen-address:
jta-migratable-target:
user-preferred-server: Server_3
cluster: Cluster_1
传递查询以请求信息。在这种情况下
'.domain.server[] | .name'
将获取服务器名称
# multiple servers
yq -o 'y' '.domain.server[] | .name' config.xml
# single server
yq -o 'y' '.domain.server | .name' config.xml
对于
yq
v4.35.x 左右的某些版本,下面的命令会抛出警告
12:14:03 initCommand [警告] yq 默认输出现在为“auto”(基于文件扩展名)。通常 yq 会输出“xml”,但为了向后兼容,已设置“yaml”。请使用 -oy 指定 yaml,或删除 -p 标志。
yq -p xml '.domain.server[] | .name' test.xml
结果
AdminServer
edys-web
来自
yq
帮助
-p, --输入格式字符串
-o, --output-format string [auto|a|yaml|y|json|j|props|p|xml|x|tsv|t|csv|c] 输出格式类型。 (默认“自动”)
yq -oy ...
让我有点困惑,因为在某些命令中它可能意味着 cmd -o -y
,所以
yq -o 'y' ...
yq -o 'yaml' ...
yq --output-format 'y' ...
:-)