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

如何用awk将文件1的volumeMonitorConfig下whitelistSelectorRegex更新至文件2

使用awk将文件1的volumeMonitorConfig配置同步到文件2

实现思路

  1. 从文件1中提取volumeMonitorConfig区块下whitelistSelectorRegex的具体值
  2. 用提取到的值替换文件2中对应区块的同配置项内容

具体命令

步骤1:验证提取目标值(可选)

先单独提取文件1里的目标配置值,确认是否正确:

awk '/volumeMonitorConfig:/{in_volume=1} in_volume && /whitelistSelectorRegex/{print $3; exit}' file1.yaml

执行后会输出"/opt/xyz",即我们需要同步的目标值。

步骤2:批量替换生成更新文件

将提取和替换合并为一条命令,直接生成更新后的文件:

TARGET_VAL=$(awk '/volumeMonitorConfig:/{in_volume=1} in_volume && /whitelistSelectorRegex/{print $3; exit}' file1.yaml) && \
awk -v val="$TARGET_VAL" '/volumeMonitorConfig:/{in_volume=1} in_volume && /whitelistSelectorRegex/{sub(/"[^"]*"/, val); in_volume=0} 1' file2.yaml > file2_updated.yaml

命令解释

  • 提取值部分:
    • /volumeMonitorConfig:/{in_volume=1}:匹配到volumeMonitorConfig:行时,标记进入该配置区块
    • in_volume && /whitelistSelectorRegex/{print $3; exit}:在区块内找到目标配置行时,打印第三个字段(引号包裹的正则值),然后退出awk避免处理后续无关内容
  • 替换部分:
    • -v val="$TARGET_VAL":把提取到的值传递给awk内部变量val
    • /volumeMonitorConfig:/{in_volume=1}:同样标记进入目标配置区块
    • in_volume && /whitelistSelectorRegex/{sub(/"[^"]*"/, val); in_volume=0}:匹配到目标配置行时,用val替换引号内的所有内容,然后标记退出区块(防止误改其他区块的同名配置)
    • 1:awk中1表示执行默认操作(打印当前行),确保所有行都被输出
    • > file2_updated.yaml:将结果写入新文件,避免直接覆盖原文件(验证无误后可手动替换原文件)

注意事项

  • 确保两个YAML文件中volumeMonitorConfig区块下的whitelistSelectorRegex行格式一致(缩进、冒号空格、引号包裹方式相同)
  • 如果目标值包含特殊正则字符(如*、/),本命令中的sub操作依然有效,因为我们是直接替换引号内的内容,未将目标值作为正则匹配规则

内容的提问来源于stack exchange,提问作者Jarugula Suresh Chandra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:23:30