2016-06-09 71 views
0

我写了一个小命令来查找包含外部url的所有文件,使用ack并在sublime中打开它们,所以我可以做一个查找和替换所有标签并添加rel="nofollow"获取全部<a>标签其中不包含rel =“nofollow”

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

但现在我想确保这些<a>标签并不包含一个rel="nofollow"。任何人都可以帮助我?

我只需要获得包含所有<a>标记一个href="http(所以我敢肯定这是一个外部URL),但可能它的更好,如果我可以检查它包含了一个href="<do not contain website.nl>",所以A HREF没有website.nl。它可能不包含rel="nofollow"

将是一个巨大的奖金,如果它可以检查rel="nofollow"rel='nofollow'(所以单引号和双引号,下同href),但我可以运行相同的命令几次,有和没有双引号,所以止跌”这很大程度上是一个问题。

回答

1

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

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

但请注意,ACK将在同一时间检查只有一条线,而一个HTML <a>元素可能会跑过几行

+0

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

相关问题