Seu script não parece estar escrito corretamente:
v=$line | grep [...]
Atribuir uma variável não tem saída, então você não está colocando nada em grep
.
Provavelmente seria mais simples apontar awk
no seu arquivo hosts.txt
:
$ nmap -v -sn 10.10.10.1/24 -oG hosts.txt > /dev/null 2>&1
$ awk '$NF=="Up" { print $2 }' hosts.txt
Dado o formato do arquivo criado por nmap
(perdoe o intervalo de IPs diferentes; estou claramente em uma rede diferente, mas o exemplo ainda é válido):
$ head hosts.txt
# Nmap 7.60 scan initiated Fri May 11 10:14:28 2018 as: nmap -v -sn -oG hosts.txt 172.28.9.67/24
# Ports scanned: TCP(0;) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 172.28.9.0 (hostname1.internal) Status: Up
Host: 172.28.9.1 (hostname2.internal) Status: Up
Se estivermos interessados apenas em hosts que mostram Status: Up
, a palavra mágica é a última da linha. Portanto, usamos awk
para ver apenas as linhas em que o último campo é igual a Up
e imprimir o segundo campo (a saber: o endereço IP).