Wie verwende ich grep, um Domainnamen zu finden?

7160
hillacma

Ich habe eine Liste von URLs wie:

hxxp://url.com/subpage.html hxxp://www.url2.com/index.php hxxp://subdomain.url3.com/somepage.php ... 

Wie kann ich mit grep nur mit den Domainnamen übereinstimmen?

Alle URLs haben ein / hinter der Domäne. Und es gibt viele tlds, nicht sicher, wie viele, die Liste ist ziemlich groß.

4

3 Antworten auf die Frage

5
Dennis Williamson

Um nicht-gierige Regexes mit verwenden zu können, müssen grepSie die -POption verwenden und die -oOption gibt nur den übereinstimmenden Teil aus. Sie müssen auch Lookarounds verwenden, damit ein Teil der Übereinstimmung nicht in der Ausgabe enthalten ist.

grep -Po '.*?//\K.*?(?=/)' 

Beispiel:

$ echo 'hxxp://subdomain.url3.com/somepage.php' | grep -Po '.*?//\K.*?(?=/)' subdomain.url3.com 
0
Robert Leckie

Es ist ein großartiger Ort Ihre regex Fähigkeiten zu testen hier . Der Ausdruck sollte so aussehen

.*?//(.*)/

Sie müssen alle Ergebnisse durchlaufen. Auf der Seite, die ich Ihnen gegeben habe, können Sie diesen Ausdruck und eine Webadresse eingeben, und es wird Ihnen angezeigt, was übereinstimmt. Denken Sie auch daran, dass Sie die erfasste Variable nur für eine begrenzte Zeit haben werden.

Das funktioniert nicht für http: // url.com / verzeichnis / page.html Karl Bielefeldt vor 13 Jahren 0
0
Hydaral

Wenn nach der Domäne nur eine TLD vorhanden ist, sollte dies funktionieren (ich gehe davon aus, dass Sie die Unterdomäne ausschließen möchten):

[^\./]*\.[^\./]*/ 

Es hat zwar immer noch den nachgestellten Schrägstrich, aber Sie können das einfach durchleiten sed.