grep ^Address my_file | grep -v "#" | awk '{print $2}'
Eu tenho o seguinte conteúdo no arquivo. Eu gostaria de imprimir o endereço IP que está sob o nome.
Server: 17.128.100.12
Address: 17.128.100.12#53
Name: Testserver1
Address: 17.146.118.156
Server: 17.128.100.12
Address: 17.128.100.12#53
Name: Testserver2
Address: 17.146.118.168
Server: 17.128.100.12
Address: 17.128.100.12#53
Name: Testserver3
Address: 17.146.118.166
A saída deve se parecer com:
17.146.118.156
17.146.118.168
17.146.118.166
Você pode usar awk
com isto:
awk 'BEGIN {firstName=0;} /Name/ {firstName=1;} /Address/ {if(firstName) {print $NF}; firstName=0;}' <file>
perl -0777 -e 'print join "\n", <> =~ m/Name.*?Address:\s*([\d.]+)/gms;'
Usa um regex de várias linhas para corresponder a 'dígitos e pontos', depois de um 'Endereço:' que é diretamente precedido (porque .*?
não é remunerado) por nome
Lê isso de <>
, que é o identificador de arquivo mágico - lê STDIN ou arquivos especificados, por exemplo,
perl -0777 -e 'print join "\n", <> =~ m/Name.*?Address:\s*([\d.]+)/gms;' somefile
Como alternativa, defina o separador de registro como 'Nome':
perl -lne '$/="Name:"; /Address: ([\d\.]+)/ && print $1'
Por causa da falta de g
, ele corresponde apenas à primeira vez em cada 'registro'.