我试图替换cwe.mitre.org.*.html (regex) URL的任何出现,并删除.html扩展,而不更改任何其他类型的URL。
示例:
https://cwe.mitre.org/data/definitions/377.html
http://google.com/404.html预期:
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回引用和子表达式“部分。
发布于 2022-04-03 03:25:33
$ sed 's/\(cwe\.mitre\.org.*\)\.html/\1/' file
https://cwe.mitre.org/data/definitions/377
http://google.com/404.htmlgoogle sed捕获组。
发布于 2022-04-03 06:43:19
GNU AWK解决方案,让file.txt内容
https://cwe.mitre.org/data/definitions/377.html
http://google.com/404.html然后
awk '/cwe\.mitre\.org.*\.html/{sub(/\.html$/,"")}{print}' file.txt给予输出
https://cwe.mitre.org/data/definitions/377
http://google.com/404.html说明:如果在行中找到已提供的regex,请使用空字符串替换.html,后面是行尾($)。每一行,不管有没有变化,print。
(用GNU Awk 5.0.1测试)
发布于 2022-04-03 12:25:26
使用
sed -Ei 's/(cwe\.mitre\.org.*)\.html/\1/' file解释
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反向引用模式中括号大小的部分捕获的字符串。当您想要在结果中保留一段匹配时,请使用反向引用。
https://stackoverflow.com/questions/71722731
复制相似问题