AWK: dividir URL em partes e imprimir

0

Eu tenho esses dois

http://www.example.com:8888/index.php

http://home.example.com:8888/index.php ( home pode ser qualquer coisa, menos www )

e deseja obter isso:

example.com

home.example.com

De preferência, de alguma forma legível, entendo como funciona daqui a um ano.

Esta é minha tentativa:

echo http://www.example.com:8888/index.php | awk -F[/:\'www\'] '{print $7}'

mas o resultado é

.example.com (observe o ponto) quando aplicado a www.example.com

funciona bem para home.example.com se eu print $4 , mas eu preferiria se eu pudesse usar a mesma cláusula de impressão em ambos os casos.

Obrigado.

    
por d-b 13.06.2018 / 08:29

3 respostas

1

sed solução:

sed -E 's~http://(www\.)?([^:]+).*~~' file
  • ~ - tratado como sed separador do subcomando
  • -E - permite regexps estendidos
  • (www\.)? - corresponde a www. part opcional%
  • ([^:]+) - corresponde a qualquer sequência de caracteres, exceto :

A saída:

example.com
home.example.com
    
por 13.06.2018 / 08:33
1

Em três etapas:

  1. Remova tudo até o :// no URL.
  2. Remova tudo após o primeiro / ou : na string restante. Isso agora deixa você com apenas o nome do host do URL original.
  3. Remover bits que você não deseja, por exemplo www. desde o início do nome do host.
sed -e 's@^.*://@@' -e 's/[/:].*$//' -e 's/^www\.//'

A execução disso nos seus URLs de exemplo resultará em

example.com
home.example.com

Usando awk :

awk -F'[/:]+' '{ sub("^www\.", "", $2); print $2 }'

Isso trata as linhas de entrada como registros de campos delimitados por qualquer número de : ou / consecutivos. Isso significa que o nome do host estará disponível no segundo campo em cada linha.

O sub() simplesmente removerá o bit do nome do host no qual não estamos interessados (aqui, www. no início do nome do host).

    
por 13.06.2018 / 09:05
0

Usando o GNU awk e sua definição de padrão de campo FPAT :

 awk -v FPAT='([^/]+\.)+[^:/]+' '{print $1}'

O padrão de campo é definido como uma sequência de caracteres excluindo o / seguido por um ponto . e deve terminar com : ou / .

Talvez um pouco permissivo para uma URL, mas detecta fqdn com e sem o número da porta.

    
por 13.06.2018 / 08:49

Tags