首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash /awk/perl:删除一组字符,除非它与特定字符串匹配

bash /awk/perl:删除一组字符,除非它与特定字符串匹配
EN

Stack Overflow用户
提问于 2019-12-10 19:29:40
回答 1查看 92关注 0票数 0
  • 目标是删除一组字母数字字符(包括“_”,“”)。和“-”时,它们出现在第二个冒号(:)之前,除非该组与https*匹配。第二个冒号也必须是removed.
  • Another约束,如果第三个字段(第二个冒号后面的字段)至少包含一个冒号,则不必执行任何操作。

例如,以下清单.:

代码语言:javascript
复制
- name_1: name_11:value-1
  name_2: value-2
  name_3: http://value-3
- name_4: https://value-4
  name_5: name_51:value-5
  name_6: value-61:value-62:value-63

..。必须转化为:

代码语言:javascript
复制
- name_1: value-1
  name_2: value-2
  name_3: http://value-3
- name_4: https://value-4
  name_5: value-5
  name_6: value-61:value-62:value-63

下面的sed命令移除所有第二个"name“字段,包括当它们与‘https*’匹配时:

代码语言:javascript
复制
sed -E 's|([[:blank:]-]+[[:alnum:]_\.-]+:[[:blank:]]+)[[:alnum:]_\.-]+:([^:]+)$|\1\2|g' file
- name_1: value-1
  name_2: value-2
  name_3: //value-3
- name_4: //value-4
  name_5: value-5
  name_6: value-61:value-62:value-63

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 19:47:15

使用替换((https?:)|[[:alnum:]_.-]+:)捕获http:https:

代码语言:javascript
复制
sed -E 's/([[:blank:]-]+[[:alnum:]_.-]+:[[:blank:]]+)((https?:)|[[:alnum:]_.-]+:)([^:]+)$/\1\3\4/g' file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59274143

复制
相关文章

相似问题

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