使用sed正则匹配纯数字值并为其添加双引号的问题
解决方案
直接用这个sed命令就能精准处理你的需求:
sed '/^\s*HEALTH_ELASTIC_PORT:/ s/:\s*\([0-9]\+\)$/:"\1"/' values.yaml
命令拆解:
/^\s*HEALTH_ELASTIC_PORT:/:专门匹配**以任意空白(适配YAML层级缩进)+ HEALTH_ELASTIC_PORT:**开头的行,确保只处理目标键s/:\s*\([0-9]\+\)$/:"\1"/::\s*匹配冒号后可能存在的空白字符\([0-9]\+\)$捕获行尾的纯数字(至少一位):"\1"把捕获到的数字用双引号包裹替换回去
如果需要直接修改原文件(原地替换):
- Linux环境:
sed -i '/^\s*HEALTH_ELASTIC_PORT:/ s/:\s*\([0-9]\+\)$/:"\1"/' values.yaml - macOS环境(需加空参数):
sed -i '' '/^\s*HEALTH_ELASTIC_PORT:/ s/:\s*\([0-9]\+\)$/:"\1"/' values.yaml
为什么你之前的命令不行?
- 命令是全局替换所有数字串,没有限定只处理
HEALTH_ELASTIC_PORT对应的行,会把文件里所有数字都改掉 - 用了
"和&这种HTML转义字符,YAML里直接用普通双引号"即可,不需要转义 - 匹配规则未限定是行尾的纯数字,会把混合字符串里的数字片段也错误替换
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

