首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed正则表达式匹配精确模式而忽略某些模式

sed正则表达式匹配精确模式而忽略某些模式
EN

Stack Overflow用户
提问于 2022-08-10 07:04:09
回答 2查看 60关注 0票数 1

我有一个YML,其中我需要用双引号附加数字。我试过不同的正则表达式,但不知怎么地,它在某个地方破裂了。我要避免白体或阿尔法..。

代码语言:javascript
复制
- name: HEALTH_ELASTIC_HOST 
  value: 40c07d4283d245.elastic.test.com
- name: HEALTH_ELASTIC_PORT
  value: 9243
- name: HEALTH_ELASTIC_USERNAME
  value: elastic

我使用的基本cmd,并修改了

代码语言:javascript
复制
sed 's/[0-9]*[0-9]/"&"/g' values.yaml

预期结果

代码语言:javascript
复制
- name: HEALTH_ELASTIC_HOST 
  value: 40c07d4283d245.elastic.test.com
- name: HEALTH_ELASTIC_PORT
  value: "9243"
- name: HEALTH_ELASTIC_USERNAME
  value: elastic

任何帮助都是对任何文档或cmd的appreciated..link。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-10 07:11:28

您可以使用此sed

代码语言:javascript
复制
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包装回来。

票数 1
EN

Stack Overflow用户

发布于 2022-08-10 07:09:03

在显示的示例中,请尝试如下(专家建议使用yq类工具来编辑yaml,因为OP在这里使用sed,所以请使用它)。

代码语言:javascript
复制
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:在其中,第二个捕获组中有数字。

然后,在执行替换时,只需根据需要将其替换为第一个捕获组,然后是",然后是第二个捕获组,然后是"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73301990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档