2016-06-09 70 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/。 –

相關問題