Como usar o grep para corresponder aos nomes de domínio?

4

Eu tenho uma lista de URLs como:

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

Como posso usar o grep para corresponder apenas aos nomes de domínio?

Todos os URLs têm um / após o domínio. E há muitas tlds, não tenho certeza de quantas, a lista é bem grande.

    
por hillacma 10.01.2011 / 04:51

3 respostas

5

Para usar expressões regulares não gananciosas com grep , você precisará usar a opção -P e a opção -o exibirá apenas a parte correspondente. Você também precisará usar lookarounds para que parte da correspondência não seja incluída na saída.

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

Exemplo:

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

Há um ótimo lugar para testar suas habilidades de regex aqui . A expressão deve se parecer com

.*?//(.*)/

Você precisará percorrer todos os resultados. Na página que lhe dei, você pode colocar essa expressão em um endereço da Web e, em seguida, mostrará o que corresponde. Lembre-se também de que você terá a variável capturada por um tempo limitado.

    
por 10.01.2011 / 05:50
0

Se eles tiverem apenas um TLD após o domínio, isso deve funcionar (suponho que você queira excluir o subdomínio):

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

Ele ainda tem a barra final, mas você pode canalizar isso através de sed .

    
por 02.02.2011 / 07:45