T
twelve
Grünschnabel
[erledigt] IP aus String extrahieren
Hallo,
ich möchte aus einem String eine IP auslesen. Da die IP aus nicht immer von den gleichen Zeichen eingeschlossen wird, habe ich es mit einem regulären Ausdruck versucht.
Leider komme ich aber zu keinem brauchbaren Ergebnis.
Hier sind meine Versuche:
1. Scheint zu funktionieren, außer es kommt eine Ziffer im Teilstring vor der IP vorkommt:
- string="Hallo127.0.0.1Welt"; echo "${string}" | sed -e 's/\([^0-9]*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 127.0.0.1
- string="12Hallo2k89.31.46.178Welt3"; echo "${string}" | sed -e 's/\([^0-9]*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 12Hallo289.31.46.178
2. Extrahiert die IP, aber entfernt immer die erste(n) Ziffer(n) der IP:
- string="Hallo127.0.0.1Welt"; expr match "$string" '.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)'
- string="Hallo127.0.0.1Welt"; echo "${string}" | sed -e 's/\(.*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 7.0.0.1
- string="12Hallo2k89.31.46.178Welt3"; expr match "$string" '.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)'
- string="12Hallo2k89.31.46.178Welt3"; echo "${string}" | sed -e 's/\(.*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 9.31.46.178
Woran liegt es, dass der folgende Ausdruck nicht funktioniert (bzw. wie könnte er funktionieren):
- string="12Hallo2k89.31.46.178Welt3"; expr match "$string" '\([0-9]\{1,3\}\(\.[0-9]\)\{3\}\)'
Gruß
Robert
PS: Ich verwende die Bash unter Kubuntu, Debian und Cygwin.
Hallo,
ich möchte aus einem String eine IP auslesen. Da die IP aus nicht immer von den gleichen Zeichen eingeschlossen wird, habe ich es mit einem regulären Ausdruck versucht.
Leider komme ich aber zu keinem brauchbaren Ergebnis.
Hier sind meine Versuche:
1. Scheint zu funktionieren, außer es kommt eine Ziffer im Teilstring vor der IP vorkommt:
- string="Hallo127.0.0.1Welt"; echo "${string}" | sed -e 's/\([^0-9]*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 127.0.0.1
- string="12Hallo2k89.31.46.178Welt3"; echo "${string}" | sed -e 's/\([^0-9]*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 12Hallo289.31.46.178
2. Extrahiert die IP, aber entfernt immer die erste(n) Ziffer(n) der IP:
- string="Hallo127.0.0.1Welt"; expr match "$string" '.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)'
- string="Hallo127.0.0.1Welt"; echo "${string}" | sed -e 's/\(.*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 7.0.0.1
- string="12Hallo2k89.31.46.178Welt3"; expr match "$string" '.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)'
- string="12Hallo2k89.31.46.178Welt3"; echo "${string}" | sed -e 's/\(.*\)\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\(.*\)/\2/'
-> Ausgabe: 9.31.46.178
Woran liegt es, dass der folgende Ausdruck nicht funktioniert (bzw. wie könnte er funktionieren):
- string="12Hallo2k89.31.46.178Welt3"; expr match "$string" '\([0-9]\{1,3\}\(\.[0-9]\)\{3\}\)'
Gruß
Robert
PS: Ich verwende die Bash unter Kubuntu, Debian und Cygwin.
Zuletzt bearbeitet: