Você poderia tentar com o comando 'awk' como segue,
nmap -sP 192.168.1.* | awk -F"[)(]" '/^Nmap/{Nmap=$(NF-1); C+=1} /^MAC Address/{print C"."$(NF-1) "("Nmap")" }'
saída,
1. Apple (192.168.1.21)
2. Liteon Technology (192.168.1.15)
explicações:
-
com o
-F
do awk aberto, você está dizendo 'awk' que suas entradas estão delimitadas com(
e / ou)
, como o que foi especificado dentro de grupos de delimitadores-F"[)(]"
-
o
'/.../{...} /.../{...}'
, é o corpo do script do awk, que no seu caso ele só executará primeiro/^Nmap/{Nmap=$(NF-1); C+=1}
ou segundo/^MAC Address/{print C"."$(NF-1) "("Nmap")" }
ou nenhuma dessas duas partes da condição onde especificamos ser executada apenas se a sequência de caracteres de entrada ou line starts (^
, que é a âncora da linha inicial e aponta para o início de uma linha / registro) com os padrõesNmap
(ou na segunda parteMAC Address
). qualquer correspondência encontrada irá executar os códigos dentro de suas chaves{...}
o que a primeira parte está fazendo?
Como explicado acima, se a correspondência for encontrada, segure o segundo último campo ( NF
apontando o último campo (ou seu número de campos retornando em um registro com base em delims definidos e $NF
seu valor) para a variável Nmap
com $(NF-1)
; o C+=1
é uma variável de sinalizador de contador que usamos para contar o número de correspondências também no final usando para a lista de IDs na saída
o que a segunda parte está fazendo?
mesmo que acima, mas quando a correspondência for encontrada ^MAC Address
, primeiro imprima o contador C
valor, imprima um ponto .
, a seguir imprima o segundo último campo da linha correspondente e, no final, imprima o valor de 'Nmap' dentro dos paranteces qual é o IP da linha correspondente anterior