【问题标题】:Get all <a> tags which do not contain a rel="nofollow"获取所有不包含 rel="nofollow" 的 <a> 标签
【发布时间】:2026-02-17 00:20:10
【问题描述】:

我编写了一个小命令来查找所有包含外部 url 的文件,使用 ack 并在 sublime 中打开它们,所以我可以对所有标签进行查找和替换并添加 rel="nofollow"

sublime $(ack -l '<a[^>]+href="http')

但现在我想确保那些&lt;a&gt; 标记不包含rel="nofollow"。谁能帮帮我?

我只需要获取所有包含href="http&lt;a&gt; 标签(所以我很确定它是一个外部网址),但如果我可以检查它是否包含href="&lt;do not contain website.nl&gt;" 可能会更好,所以是一个href没有website.nl。它可能不包含rel="nofollow"

如果它可以检查 rel="nofollow"rel='nofollow' 将是一个很好的奖励(所以单引号和双引号,href 相同)但是我可以多次运行相同的命令,带和不带双引号,所以这不是什么大问题。

【问题讨论】:

    标签: regex perl ack


    【解决方案1】:

    我相信 ack 使用 Perl 正则表达式模式,在这种情况下你应该使用负前瞻,像这样

    $ sublime $(ack -l '<a\b(?=[^>]+\bhref="http)(?![^>]+\brel="nofollow")')
    

    但请注意,ack 一次只检查一行,而 HTML &lt;a&gt; 元素可能会运行多行

    【讨论】:

    • 非常好!谢谢!奇迹般有效!! :) 事实上,根据他们的网站 ack 确实使用 Perl 正则表达式模式:beyondgrep.com/why-ack.