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 ' '
}
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?
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 ' '
}
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}')
name=$(host "$server" | grep -o '[^[:space:]]*$')
selecionará a porção final da saída do comando do host.
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
$
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.