2010-12-04 2 views
0

ich eine große Liste haben (in Millionen) von URLs in einer Datei (eine pro Zeile), wie folgt aus:greppen eine Liste von URLs für ein Keyword in Domänenteil

http://someDomain.com/articlex=123&b=23 

http://KEYWORDindomain.net/blahblah 

http://anotherKEYWORDindomain.org/blahblah/blip/q=123 

http://blabkkk.org/KEYWORD/blip/q=123 

(etc) 

Ich möchte alle auszudrucken die URLs, wo ein bestimmtes Keyword im Domain-Teil der URL erscheint.

ex.

ich denke, das sollte leicht grep-fähig sein, aber Probleme haben, die Regex herauszufinden. Vielleicht muss ich ein paar Befehle ausführen, um meine gewünschten Ergebnisse zu erzielen?

in der Nähe ich bekommen habe, ist: grep "http: //.* \ /"

Wer eine gute Möglichkeit, diese Shell-Befehle zu tun?

Antwort

0

Versuche

\b(https?|ftp|file)://[^/\s]*KEYWORD[^/\s]*(?:/[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$])? 

Dies wird eine URL übereinstimmen, die KEYWORD in dem Teil vor dem ersten Schrägstrich enthält (falls vorhanden).

+0

thx für den Tipp, Probleme haben, es zur Arbeit zu bekommen, hier ist, was ich versuchte und der Fehler, den ich bekam: mike @ mike-desktop: ~ $ grep "\ b (https? | Ftp | file): // [ ^/\ s] * Urlaub [^/\ s] * (?:/[- A-Z0-9 + & @ # /%? = ~ _ | $!:,.;] * [A-Z0-9 + & @ # /% = ~ _ | $])? " urls.txt bash:,: nicht erkannter history-Modifikator mike @ mike-desktop: ~ $ egrep \ b (https? | ftp | file): // [^/\ s] * urlaub [^/\ s] * (?:/[- A-Z0-9 + & @ # /%? = ~ _ | $!:,.;] * [A-Z0-9 + & @ # /% = ~ _ | $])? urls.txt bash:,: unrecognized history modifier – mike

+0

Probieren Sie 'grep' mit der Option' --perl-regexp' aus. Außerdem bin ich mir nicht sicher, ob Sie die umgekehrten Schrägstriche verdoppeln müssen, um ihnen zu entkommen. –

0

Der einfachste Ausdruck, der qualifiziert ist dies (Sie darauf vertrauen, dass alles, was http hat: // in es der Beginn einer URL ist, was nicht immer der Fall sein kann, aber ...):

grep 'http://[^/]*KEYWORD' 

Wenn Sie mit mehr URL-Präfixe hübsch machen wollen, versuchen Sie dies:

grep '\<[a-z]*://[^/]*KEYWORD' 

die [^ /] * ist der Schlüssel, es bedeutet ‚jedes Zeichen außer/Null Auftreten oder eine beliebige Anzahl von Zeiten‘.

Wenn Sie wissen, dass die zu sortierende Datei eine URL pro Zeile auflistet und dass die URL am Anfang der Zeile beginnt, dann können Sie sich vor unwahrscheinlichen, aber potentiell falschen http: // in der Mitte schützen eine Zeile mit dem folgenden:

grep '^http://[^/]*KEYWORD' 

Genau wie Tim vorgeschlagen, können Sie immer Räume halten auch raus, wenn Sie Gründe haben zu glauben, dass Ihre URL-Liste Leerzeichen enthalten kann (ich die alte Methode der Auflistung Raum bevorzugen und Tab):

grep '^http://[^/ \t]*KEYWORD' 

Hoffe das hilft.