如何将Linux命令输出写入YAML文件的vm_name字段
问题描述
需要将Linux命令输出写入YAML文件的指定字段:
- 执行命令:
cat init.txt | grep glal20213lvdlb04,输出为glal13lvd - 目标:将该输出填入
instant.yml中instance01.properties.vm_name字段,原YAML内容如下:
resources: instance01: type: ../../../templates/ipnf.yaml properties: vm_name: 'THE OUTPUT SHOULD COME HERE' vm_flavour: 'dsolate' image_name: 'pdns_14121207' vm_az: 'az-1' vm_disk_root_size: '50' vm_disk_data_size: '50' network_mgmt_refs: 'int:dxs_pcg' network_mgmt_ip: '10.194.112.75'
解决方案
方案1:sed文本替换(简单场景)
如果vm_name的占位符固定为'THE OUTPUT SHOULD COME HERE',直接用sed替换:
# 提取命令输出并去除多余空白 VM_NAME=$(grep glal20213lvdlb04 init.txt | xargs) # 替换YAML中的占位符,直接修改原文件 sed -i "s/'THE OUTPUT SHOULD COME HERE'/'$VM_NAME'/g" instant.yml
注:BSD系统(如macOS)需将
sed -i改为sed -i '',否则会报错。
方案2:yq工具(专业YAML处理)
如果YAML结构可能变动,用yq精准定位节点更可靠,避免破坏语法:
- 安装yq(以Debian/Ubuntu为例):
sudo apt update && sudo apt install yq
- 执行修改命令:
VM_NAME=$(grep glal20213lvdlb04 init.txt | xargs) yq eval '.resources.instance01.properties.vm_name = "'$VM_NAME'"' -i instant.yml
这种方法会严格遵循YAML语法,适合复杂配置文件场景。
内容的提问来源于stack exchange,提问作者Siddharth
相关产品推荐
相关产品推荐

