2017-02-28 3 views
-1

So möchte ich meine IP-Adresse und Subnetzmaske bekommen. Die Ausgabe von ifconfig sollte nach sed "eingefügt" werden. So sollte sed die Ausgabe modifizieren, um nur die IP- und Subnetzmaske zu erhalten.Get IP-und Subnetzmaske mit Befehl sed

Like:

ifconfig | sed -n -e s/:127\.0\.0\.1 //g -e s/ *inet addr:\([0-9.]\+\).*/\1/gp 

Edit:

ifconfig | sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' 

Damit bekam ich die Subnet-Mask und die IP, aber ich habe auch Bcast. Wie kann ich die Regex ändern, um nur Subnetzmaske und IP zu erhalten?

Ausgabe edit:

inet Adresse:192.168.142.191 
Bcast:192.168.255.255 
Maske:255.255.0.0 
inet Adresse:127.0.0.1 
Maske:255.0.0.0 

Ich möchte diese Ausgabe:

inet Adresse:192.168.142.191 
Maske:255.255.0.0 
+0

ipconfig oder ifconfig? wäre nützlich, wenn Sie die Ausgabe vor der Verwendung von sed auch Ihre endgültige erwartete Ausgabe hinzufügen – Sundeep

+0

@Sundeep siehe bearbeiten –

Antwort

0

Try this:

ifconfig | grep -v 127.0.0.1 | awk '/inet/{gsub("addr:", "", $2); print $2}; /netmask/{gsub("netmask", "", $2); print $4};' 

Es ist Ausgangs Loopback-Schnittstelle "lo 127.0.0.1" auszuschließen. Und gibt Ihnen und Ausgabe wie folgt:

10.0.0.1 
255.255.0.0 
192.168.1.46 
255.255.255.0 

Eine Zeile pro IP oder Maske. Oder Sie können nur eine Schnittstelle angeben, die ifconfig eth0 statt ifconfig tut. Auf diese Weise drucken Sie nur die gewünschte Schnittstelle.

Wenn Sie das genaue Format mit der "inet" wollen, "Adresse" usw. können Sie es zu awk hinzufügen:

ifconfig | grep -v 127.0.0.1 | awk '/inet/{gsub("addr:", "", $2); print "inet Adresse:"$2}; /netmask/{gsub("netmask", "", $2); print "Maske:"$4};' 

Sein Ausgang ist:

inet Adresse:10.0.0.1 
Maske:255.255.0.0 
inet Adresse:192.168.1.46 
Maske:255.255.255.0 
0

Warum nicht tat Verwenden Sie so:

ifconfig |sed -n 's/inet addr:\(.*\)Bcast:.*Mask:\(.*\)/\1 \2/p' 

Aber Sie brauchen konkretere Regex für IP. Sie können es in Google finden.

0

Betrachten Sie die -n Option und die Suche kombiniert und Befehl s/regexp/Ersatz/ ersetzen. Machen Sie es die ganze Zeile passen und ersetzen Sie es nur mit den Bits, die Sie brauchen:

ifconfig | sed -rn 's/^.*(inet[0-9. ]+netmask[0-9. ]+).*$/\1/p' 

Ihre ifconfig Ausgabe scheint von meinen verschieden zu sein, so müssen Sie möglicherweise die inet und Netmaske Teile ändern Es funktioniert auf Ihrem System.