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
-Fdo 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