usando sed / awk em variáveis de script bash

3

Tem sido um longo tempo desde que eu precisei usar sed ou awk, então fique comigo. Estou tentando obter o nome de um servidor DNS 4.2.2.1 .

Usando host 4.2.2.1 , recebo esta saída:

1.2.2.4.in-addr.arpa domain name pointer a.resolvers.level3.net

no meu script, faço isso como:

name="$($host $server)"

Como posso usar sed / awk em $name para obter apenas o a.resolvers.level3.net , tendo em mente que usarei isso em servidores completamente diferentes, então não posso apenas grep a.resolvers sair da variável?

    
por Jim 03.05.2017 / 11:01

5 respostas

11

Outra opção é dividir a string:

echo ${name##* }

Isso dividirá a string e manterá a peça começando do último espaço até o final.

${name <-- from name  
  ##   <-- trim the front  
  *    <-- matches anything  
  ' '  <-- until the last ' '  
 }  
    
por 03.05.2017 / 11:21
3

A coisa mais simples a fazer seria usar awk e dizer para imprimir o último campo:

$ echo "$name" | awk '{print $NF}'
a.resolvers.level3.net

É claro que, se tudo o que você precisa é o IP do servidor, você pode obtê-lo em name , para não precisar processá-lo mais tarde:

name=$(host $server | awk '{print $NF}')
    
por 03.05.2017 / 11:14
3
name=$(host "$server" | grep -o '[^[:space:]]*$')

selecionará a porção final da saída do comando do host.

    
por 03.05.2017 / 11:30
3

Apenas colocando uma alternativa sed também. Isso imprimirá a última coluna de uma string separada por espaços em branco.

 sed 's/.*[[:space:]]\(.*\)$//'

Eu testei para casos em que a.resolvers.level3.net é a única string na variável $ name e funciona.

$ echo "$name"
1.2.2.4.in-addr.arpa domain name pointer a.resolvers.level3.net
$
$ echo "$name"|sed 's/.*[[:space:]]\(.*\)$//'
a.resolvers.level3.net
$
$ name="a.resolvers.level3.net"
$ echo "$name"|sed 's/.*[[:space:]]\(.*\)$//'
a.resolvers.level3.net
$
    
por 03.05.2017 / 13:05
3

Uma resposta muito mais curta, envolvendo nenhuma manipulação de string, é

dig +short -x 4.2.2.1

que exibe

a.resolvers.level3.net.

e nada mais. Claro que você tem que ter dig instalado.

    
por 03.05.2017 / 21:40

Tags