2010-12-04 31 views
0

J'ai une grande liste (en millions) d'URL dans un fichier (un par ligne), comme ce qui suit:grepper une liste des URLS pour un mot-clé dans la partie de domaine

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) 

Je veux imprimer tous l'URL où un certain mot clé apparaît dans la partie de domaine de l'URL.

ex.

grep <regex>KEYWORD<regex> file 

output 
====== 
http://KEYWORDindomain.net/blahblah 
http://anotherKEYWORDindomain.org/blahblah/blip/q=123 

je me dis que cela devrait être facilement grep-pouvoir, mais de la difficulté à déterminer la regex. Peut-être que j'ai besoin de tuyau quelques commandes pour atteindre mes résultats souhaités?

le plus proche que j'ai obtenu est la suivante: grep "http: //.* \ /"

Quelqu'un at-il une bonne façon de le faire en utilisant les commandes shell?

Répondre

0

Essayez

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

Cela correspond une URL qui contient KEYWORD dans la partie avant la première barre oblique (s'il y en a).

+0

thx pour le conseil, avoir du mal à faire fonctionner, voici ce que j'ai essayé et l'erreur que j'ai eu: mike @ mike-desktop: ~ $ grep "\ b (https? | Ftp | fichier): // [ ^/\ s] * vacances [^/\ s] * (?:/[- A-Z0-9 + & @ # /%? = ~ _ | $!:,.;] * [A-Z0-9 + & @ # /% = ~ _ | $])? " urls.txt bash:,: modificateur d'historique non reconnu mike @ mike-desktop: ~ $ egrep \ b (https? | ftp | fichier): // [^/\ s] * vacances [^/\ s] * (?:/[- A-Z0-9 + & @ # /%? = ~ _ | $!:,;;] * [A-Z0-9 + & @ # /% = ~ _ | $])? urls.txt bash:,: modificateur d'historique non reconnu – mike

+0

Essayez 'grep' avec l'option' --perl-regexp'. En outre, je ne suis pas sûr si vous devez doubler les antislashs pour leur échapper. –

0

L'expression la plus simple qui qualifie est ce (vous croyez que tout ce qui a http: // en est le début d'une URL, qui peut ne pas être toujours vrai, mais ...):

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

Si vous voulez obtenir la fantaisie avec plus de préfixes d'URL, essayez ceci:

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

le [^ /] * est la clé, cela signifie tout caractère sauf un /, occurrence zéro ou un nombre de fois.

Si vous savez que le fichier que vous devez trier répertorie une URL par ligne, et que l'URL commence au début de la ligne, alors vous pouvez vous protéger de manière improbable mais potentiellement fausse http: // au milieu de une ligne qui suit:

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

Tout comme Tim a suggéré, vous pouvez toujours garder des espaces de cela aussi, si vous avez des raisons de penser que votre liste d'URL peut contenir des espaces (je préfère l'ancienne méthode de l'espace liste et tab):

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

Espérons que cela aide.