首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex搜索,但只将字符串的一部分替换为sed。

使用regex搜索,但只将字符串的一部分替换为sed。
EN

Stack Overflow用户
提问于 2022-04-03 03:16:48
回答 4查看 69关注 0票数 1

我试图替换cwe.mitre.org.*.html (regex) URL的任何出现,并删除.html扩展,而不更改任何其他类型的URL。

示例:

代码语言:javascript
复制
https://cwe.mitre.org/data/definitions/377.html
http://google.com/404.html

预期:

代码语言:javascript
复制
https://cwe.mitre.org/data/definitions/377
http://google.com/404.html

在sed或其他工具中有什么方法可以这样做吗?

我试过sed -Ei 's/cwe.mitre.org.*.html/<REPLACEMENT>/g' file.txt,但那行不通。<REPLACEMENT>有成为正则表达式的方法吗?sed手册似乎并没有说明这一点?

编辑:关于sed手册,我错了。它确实提到了这一点,请参阅https://www.gnu.org/software/sed/manual/sed.html的"5.7回引用和子表达式“部分。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-04-03 03:25:33

代码语言:javascript
复制
$ sed 's/\(cwe\.mitre\.org.*\)\.html/\1/' file
https://cwe.mitre.org/data/definitions/377
http://google.com/404.html

google sed捕获组。

票数 2
EN

Stack Overflow用户

发布于 2022-04-03 06:43:19

GNU AWK解决方案,让file.txt内容

代码语言:javascript
复制
https://cwe.mitre.org/data/definitions/377.html
http://google.com/404.html

然后

代码语言:javascript
复制
awk '/cwe\.mitre\.org.*\.html/{sub(/\.html$/,"")}{print}' file.txt

给予输出

代码语言:javascript
复制
https://cwe.mitre.org/data/definitions/377
http://google.com/404.html

说明:如果在行中找到已提供的regex,请使用空字符串替换.html,后面是行尾($)。每一行,不管有没有变化,print

(用GNU Awk 5.0.1测试)

票数 1
EN

Stack Overflow用户

发布于 2022-04-03 12:25:26

使用

代码语言:javascript
复制
sed -Ei 's/(cwe\.mitre\.org.*)\.html/\1/' file

解释

代码语言:javascript
复制
NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    cwe                      'cwe'
--------------------------------------------------------------------------------
    \.                       '.'
--------------------------------------------------------------------------------
    mitre                    'mitre'
--------------------------------------------------------------------------------
    \.                       '.'
--------------------------------------------------------------------------------
    org                      'org'
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  \.                       '.'
--------------------------------------------------------------------------------
  html                     'html'

\1反向引用模式中括号大小的部分捕获的字符串。当您想要在结果中保留一段匹配时,请使用反向引用。

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

https://stackoverflow.com/questions/71722731

复制
相关文章

相似问题

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