如何在YAML文件含image关键字的行尾追加指定特殊字符文本
YAML指定行尾追加内容实现方案
以下方案均避开复杂转义逻辑,可直接运行使用:
sed 最简实现
放弃sed默认的/分隔符,改用不会出现在处理内容中的|作为替换命令分隔符,同时待追加的内容全程用shell单引号包裹,阻断shell对$、{}、空格等特殊字符的解析,不需要额外转义:sed -i '/image:/ s|$| # {"$imagepolicy": "xxx:xxx-test-pr333" }|' target.yaml命令逻辑:先匹配所有包含
image:关键字的行,将行尾标记替换为你要追加的注释内容,ECR地址里的斜杠、注释里的大括号/美元符号/双引号都不需要手动转义。awk 稳定实现
awk的文本匹配逻辑更直白,仅需要对字符串内部的双引号做基础转义,其他特殊字符无额外转义要求:awk '/image:/{print $0 " # {\"$imagepolicy\": \"xxx:xxx-test-pr333\" }";next}1' target.yaml > tmp.yaml && mv tmp.yaml target.yaml命令逻辑:匹配到含
image:的行时,先输出原行内容再加指定注释,其余行直接原样输出,最后将结果写回原文件。Ruby 零转义实现
利用Ruby的%q()字面量语法包裹待追加内容,完全不需要转义内部任何特殊字符:ruby -i -e 'STDIN.readlines.each{|line| line.chomp!; line << %q( # {"$imagepolicy": "xxx:xxx-test-pr333" }) if line.include?("image:"); puts line}' target.yaml
核心避坑点:不要用双引号包裹包含
$imagepolicy的文本段,否则shell/脚本语言会默认将$imagepolicy识别为变量尝试展开,导致写入内容不符合预期。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

