2016-06-09 3 views
0

Ich habe einen kleinen Befehl geschrieben, um alle Dateien zu finden, die externe URLs enthalten, mit ack und öffnen sie in Sublime, so dass ich eine Suche und ersetzen auf Alle Tags und fügen Sie ein rel="nofollow":Alle <a> Tags, die keine rel = "nofollow" enthalten

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

Aber jetzt würde ich diese <a> Tags nicht bereits über ein rel="nofollow" enthalten, um sicherzustellen, mögen. Wer kann mir helfen?

Ich brauche nur alle <a>-Tags zu erhalten, die eine href="http (so ich bin mir ziemlich sicher, dass es eine externe URL) enthalten, aber es ist wahrscheinlich besser, wenn ich zu überprüfen, könnte es eine href="<do not contain website.nl>" enthalten ist, so ein href ohne website.nl. Und es darf kein rel="nofollow" enthalten.

Würde einen großen Bonus, wenn es auf rel="nofollow" und rel='nofollow' (so einfache und doppelten Anführungszeichen, das gleiche für href) überprüfen könnte, aber ich konnte den gleichen Befehl ein paar Mal mit und ohne doppelte Anführungszeichen laufen, so dass es wouldn‘ t so viel von einem Problem sein.

Antwort

1

I ack glauben verwendet Perl regex Muster, in dem Fall, dass Sie einen negativen Vorgriffs verwenden sollten, wie diese

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

Aber beachten Sie, dass ack wird nur eine Zeile zu einem Zeitpunkt, während ein HTML <a> Element überprüfen kann über mehrere Zeilen laufen

+0

Sehr schön! Vielen Dank! Klappt wunderbar!! :) Und in der Tat, nach ihrer Website verwendet Ack Perl Regex-Muster: http://beyondgrep.com/why-ack/. –

Verwandte Themen