2017-12-31 117 views
1

Also ich bin ein kleines Netzwerk-Scan-Automatisierung-Tool mit nmap als Teil des Backend erstellen, beim Versuch, Hostnamen und IP-Adressen die IP ist wie folgt formatiert "(192.168.0.1) "Zur Zeit verwende ich diesen Code, um Hostnamen und IP-Adresse zu erfassen und zu drucken.Bash: awk Klammern aus Array-Elementen entfernen

devices=($(nmap $net_addr -sn | grep -E '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})' | awk {' print $5 "\t" $6)'})) 

printf '%-10s %s\n' "${devices[@]}" 

Dieser Code wird dieses

UNKNOWN (192.168.0.1) 
UNKNOWN (192.168.0.3) 
UNKNOWN (192.168.0.5) 
UNKNOWN (192.168.0.6) 
UNKNOWN (192.168.0.16) 
UNKNOWN (192.168.0.18) 
UNKNOWN (192.168.0.19) 
UNKNOWN (192.168.0.21) 
UNKNOWN (192.168.0.22) 
UNKNOWN (192.168.0.23) 
UNKNOWN (192.168.0.32) 
UNKNOWN (192.168.0.253) 

I substr ($ 6,2), aber dies nur hackt das erste Bit zu verwenden versucht, Druck und traurig, als die nmap IP-Adressen sind in der Länge variabel diese doesn Hilf mir nicht. Kurz gesagt, dies ist die gewünschte Ausgabe.

UNKNOWN 192.168.0.1 
UNKNOWN 192.168.0.3 
UNKNOWN 192.168.0.5 
UNKNOWN 192.168.0.6 
UNKNOWN 192.168.0.16 
UNKNOWN 192.168.0.18 
UNKNOWN 192.168.0.19 
UNKNOWN 192.168.0.21 
UNKNOWN 192.168.0.22 
UNKNOWN 192.168.0.23 
UNKNOWN 192.168.0.32 
UNKNOWN 192.168.0.253 

hier ist die Ausgabe von nmap 192.168.0.0/24 -sn

Starting Nmap 7.40 (https://nmap.org) at 2017-12-31 14:42 UTC 
Nmap scan report for UNKNOWN (192.168.0.1) 
Host is up (0.0014s latency). 
Nmap scan report for UNKNOWN (192.168.0.3) 
Host is up (0.052s latency). 
Nmap scan report for UNKNOWN (192.168.0.5) 
Host is up (0.0065s latency). 
Nmap scan report for UNKNOWN (192.168.0.6) 
Host is up (0.0073s latency). 
Nmap scan report for UNKNOWN (192.168.0.7) 
Host is up (0.029s latency). 
Nmap scan report for UNKNOWN (192.168.0.16) 
Host is up (0.011s latency). 
Nmap scan report for UNKNOWN (192.168.0.18) 
Host is up (0.053s latency). 
Nmap scan report for UNKNOWN (192.168.0.21) 
Host is up (0.011s latency). 
Nmap scan report for UNKNOWN (192.168.0.22) 
Host is up (0.012s latency). 
Nmap scan report for UNKNOWN (192.168.0.23) 
Host is up (0.0061s latency). 
Nmap scan report for UNKNOWN (192.168.0.32) 
Host is up (0.0013s latency). 
Nmap scan report for UNKNOWN (192.168.0.253) 
Host is up (0.0011s latency). 
Nmap done: 256 IP addresses (12 hosts up) scanned in 3.16 seconds 

Antwort

1

Wie pro Ihre gezeigt Eingangs Sie einzelne folgende versuchen könnte awk die gezeigt erwartete Ausgabe zu erhalten.

your_command | awk '/Nmap scan report/{gsub(/\)|\(/,"",$NF);print $(NF-1),$NF}' 

EDIT: Eliminieren grep aus Befehl des OP und versuchen, es innerhalb einzelner awk sich jetzt zu lösen.

devices=$(nmap $net_addr -sn | awk --re-interval '{if(match($0,/\([0-9]{3}\.[0-9]{3}\.[0-9]{1,3}\.[0-9]{1,3}\)/)){gsub(/\)|\(/,"",$NF);print $(NF-1),$NF}}') 

Auch da mein awk ist OLD ein, falls Sie neueste Version von awk haben dann nicht freundlich --re-interval in Lösung verwenden.

+0

ah ok so habe ich das gerade laufen: devices = ($ (nmap $ net_addr -sn | grep -E ‚([0-9] {1, 3} \. [0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3}) '| awk'/Nmap-Prüfbericht/{gsub (/ \) | \ (/, "", $ NF); print $ (NF-1), $ NF})) und was ich daraus bekam, war folgendes: ./program.sh: Zeile 10: Unerwartetes EOF bei der Suche nach passendem ''' ./program.sh: Zeile 12: Syntaxfehler: unerwartetes Ende der Datei – user3019354

+0

Habe gerade mein Problem erkannt haha, ich habe ein Anführungszeichen verpasst, der Code funktioniert wie ein Zauber, danke! – user3019354

+2

Sie brauchen Grep nicht, wenn Sie awk verwenden, da awk etwas Nützliches tun kann, das grep tun kann, zum Beispiel: 'grep 'foo' | awk '/ bar /' '=' awk '/ foo/&&/bar /' '. –

1

Sie können dies versuchen, sed

nmap $net_addr -sn | sed '/^Nmap scan report for /!d;s///;s/[)(]//g'