You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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精准定位节点更可靠,避免破坏语法:

  1. 安装yq(以Debian/Ubuntu为例):
sudo apt update && sudo apt install yq
  1. 执行修改命令:
VM_NAME=$(grep glal20213lvdlb04 init.txt | xargs)
yq eval '.resources.instance01.properties.vm_name = "'$VM_NAME'"' -i instant.yml

这种方法会严格遵循YAML语法,适合复杂配置文件场景。

内容的提问来源于stack exchange,提问作者Siddharth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:30:59