Como posso usar o sed / grep / awk para imprimir os TLDs de uma lista de nomes de host que possuem o TLD em campos diferentes?

0

Eu tenho uma lista muito grande de nomes de host dos quais estou tentando imprimir o TLD (.com, .net, .info, etc.) de cada host. O problema é que os hosts têm seus TLDs em campos diferentes, por isso não posso dizer ao cut ou awk para imprimir estaticamente um campo.

Alguns exemplos de nomes de host:

examplehost.net                             # tld is 2nd field (period delimited)
subdomain.otherhost.com                      # tld is 3rd field
subdomain.othersubdomain.yetanotherhost.info   # tld is 4th field

Como uma pequena solução, acabei de adicionar um espaço ao final de cada host para que eu possa incluí-lo em meu padrão regex e grep para ele.

sed 's/$/ /g' listofhosts.txt | grep -Eo '\.[a-z]{1,10} '

Eu estava curioso para saber se há uma maneira mais elegante de realizar isso.

    
por TheWhiteCong 07.06.2017 / 17:36

3 respostas

1

Se o seu arquivo listofhosts.txt não tiver comentários no final, então o comando comentado da steeldriver é como eu faria isso. Diga ao awk para dividir os campos em pontos e, em seguida, imprima o valor do último campo:

awk -F. '{print $NF}' listofhosts.txt

Como resultado:

net
com
info
    
por 07.06.2017 / 18:17
0

Com um único grep (se PCRE for suportado):

grep -Po '.*\.\K[^.]+$' listofhosts.txt 
    
por 07.06.2017 / 17:42
0
grep -oE '\.[^.]+$'

perl -lne 'print /(\.[^.\s]+)\s/'

sed 's/^[[:space:]]*[^[:space:]]\{1,\}\([.][^.[:space:]]\{1,\}\)[[:space:]]\{1,\}.*//'
    
por 07.06.2017 / 18:28