我有一个YML,其中我需要用双引号附加数字。我试过不同的正则表达式,但不知怎么地,它在某个地方破裂了。我要避免白体或阿尔法..。
- name: HEALTH_ELASTIC_HOST
value: 40c07d4283d245.elastic.test.com
- name: HEALTH_ELASTIC_PORT
value: 9243
- name: HEALTH_ELASTIC_USERNAME
value: elastic我使用的基本cmd,并修改了
sed 's/[0-9]*[0-9]/"&"/g' values.yaml预期结果
- name: HEALTH_ELASTIC_HOST
value: 40c07d4283d245.elastic.test.com
- name: HEALTH_ELASTIC_PORT
value: "9243"
- name: HEALTH_ELASTIC_USERNAME
value: elastic任何帮助都是对任何文档或cmd的appreciated..link。
发布于 2022-08-10 07:11:28
您可以使用此sed
sed -E 's/([: ]+)([0-9]+) *$/\1"\2"/' file.yml
- name: HEALTH_ELASTIC_HOST
value: 40c07d4283d245.elastic.test.com
- name: HEALTH_ELASTIC_PORT
value: "9243"
- name: HEALTH_ELASTIC_USERNAME
value: elastic解释:
([: ]+):匹配:或空格的匹配以及在组#2([0-9]+):匹配1+数字中的捕获在组#2*:匹配0或更多spaces$:匹配结束position\1"\2":中的捕获作为替代,我们用双引号将引用#2包装回来。
发布于 2022-08-10 07:09:03
在显示的示例中,请尝试如下(专家建议使用yq类工具来编辑yaml,因为OP在这里使用sed,所以请使用它)。
sed -E 's/(^[[:space:]]+value: )([0-9]+$)/\1"\2"/g' Input_file解释:简单解释将是,使用sed的-E选项启用ERE(扩展正则表达式),然后在主程序中使用regex (^[[:space:]]+value: )([0-9]+$)和sed的替代选项。Regex((^[[:space:]]+value: )([0-9]+$))将创建两个捕获组,其中第一个将具有如下值:value:在其中,第二个捕获组中有数字。
然后,在执行替换时,只需根据需要将其替换为第一个捕获组,然后是",然后是第二个捕获组,然后是"。
https://stackoverflow.com/questions/73301990
复制相似问题