[^<>]* 中提取所有链接( html )文件。 我试着用 sed 做到这一点,但我得到了各种各样的结果,只是不是我想要的。我知道我的正-6ren">
gpt4 book ai didi

regex - 如何仅打印与 sed 匹配的内容?

转载 作者:行者123 更新时间:2023-11-29 09:49:04 24 4
gpt4 key购买 nike

好吧,这很简单,但我想不通。

基本上我想从一个很大的 <a href="[^<>]*">[^<>]*</a> 中提取所有链接( html )文件。

我试着用 sed 做到这一点,但我得到了各种各样的结果,只是不是我想要的。我知道我的正则表达式是正确的,因为我可以替换文件中的所有链接:

sed 's_<a href="[^<>]*">[^<>]*</a>_TEST_g'

如果我在类似的东西上运行它

<div><a href="http://wwww.google.com">A google link</a></div>
<div><a href="http://wwww.google.com">A google link</a></div>

我明白了

<div>TEST</div>
<div>TEST</div>

我怎样才能摆脱其他一切,只打印匹配项呢?我首选的最终结果是:

<a href="http://wwww.google.com">A google link</a>
<a href="http://wwww.google.com">A google link</a>

附言。我知道我的正则表达式不是最灵活的,但足以满足我的意图。

最佳答案

匹配整行,将感兴趣的部分放在一个组中,替换为该组的内容。使用 -n选项来抑制不匹配的行,并添加 p打印 s 结果的修饰符命令。

sed -n -e 's!^.*\(<[Aa] [^<>]*>.*</[Aa]>\).*$!\1!p'

请注意,如果一行中有多个链接,则只打印最后一个链接。您可以对此进行改进,但它超出了简单的 sed 用法。最简单的方法是使用两个步骤:首先在任意两个链接之前插入一个换行符,然后提取链接。

sed -n -e 's!</a>!&\n!p' | sed -n -e 's!^.*\(<[Aa] [^<>]*>.*</[Aa]>\).*$!\1!p'

这仍然不处理 HTML 注释,<pre> ,分布在多行的链接等。解析 HTML 时,use an HTML parser .

关于regex - 如何仅打印与 sed 匹配的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com