Code: Alles auswählen
$ echo 127.0.0.1 | egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
127.0.0.1
Code: Alles auswählen
$ echo 127.0.0.1 | egrep '([0-9]{1,3})\.\1\.\1\.\1'
[kein Match]
Code: Alles auswählen
$ echo 127.0.0.1 | egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
127.0.0.1
Code: Alles auswählen
$ echo 127.0.0.1 | egrep '([0-9]{1,3})\.\1\.\1\.\1'
[kein Match]
Doch, das funktioniert schon:
Code: Alles auswählen
$ echo 127.127.127.127 | egrep '([0-9]{1,3})\.\1\.\1\.\1'
127.127.127.127
$
Mit 127.127.127.127 funktioniert es bei mir auch, aber nicht mit 127.0.0.1.tobo hat geschrieben:26.02.2024 17:12:10Doch, das funktioniert schon:Code: Alles auswählen
$ echo 127.127.127.127 | egrep '([0-9]{1,3})\.\1\.\1\.\1' 127.127.127.127 $
Na. Dann ist der Fall doch klar. \1 bezieht sich auf die gefundene Zeichenkette durch den enthaltenen regulären Ausdruck und nicht auf den regulären Ausdruck selbst.paedubucher hat geschrieben:26.02.2024 17:21:37Mit 127.127.127.127 funktioniert es bei mir auch, aber nicht mit 127.0.0.1.
Code: Alles auswählen
$ echo 127.1.1.1 | egrep '(([0-9]{1,3})\.?){4}'
127.1.1.1
Da haben wir es!heisenberg hat geschrieben:26.02.2024 17:24:13Na. Dann ist der Fall doch klar. \1 bezieht sich auf die gefundene Zeichenkette durch den enthaltenen regulären Ausdruck und nicht auf den regulären Ausdruck selbst.paedubucher hat geschrieben:26.02.2024 17:21:37Mit 127.127.127.127 funktioniert es bei mir auch, aber nicht mit 127.0.0.1.
Und auch Zahlenkolonnen ohne jeden Punkt. Dann eher sowas:Livingston hat geschrieben:26.02.2024 17:30:25Kleiner Haken: Würde auch mit einem abschließenden Punkt matchenCode: Alles auswählen
$ echo 127.1.1.1 | egrep '(([0-9]{1,3})\.?){4}' 127.1.1.1
Code: Alles auswählen
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
Vielen Dank, das ist eine sinnvolle Lösung für das Problem!tobo hat geschrieben:26.02.2024 17:37:32Und auch Zahlenkolonnen ohne jeden Punkt. Dann eher sowas:Livingston hat geschrieben:26.02.2024 17:30:25Kleiner Haken: Würde auch mit einem abschließenden Punkt matchenCode: Alles auswählen
$ echo 127.1.1.1 | egrep '(([0-9]{1,3})\.?){4}' 127.1.1.1
Code: Alles auswählen
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
So ist es, nur weil das so ist, kann man damit das passende HTML-Tag matchen:heisenberg hat geschrieben:26.02.2024 17:24:13Na. Dann ist der Fall doch klar. \1 bezieht sich auf die gefundene Zeichenkette durch den enthaltenen regulären Ausdruck und nicht auf den regulären Ausdruck selbst.paedubucher hat geschrieben:26.02.2024 17:21:37Mit 127.127.127.127 funktioniert es bei mir auch, aber nicht mit 127.0.0.1.
Code: Alles auswählen
<([bi])>.*</\1>
paedubucher hat geschrieben:26.02.2024 17:38:50Und auch Zahlenkolonnen ohne jeden Punkt. Dann eher sowas:Code: Alles auswählen
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
Code: Alles auswählen
$ echo 555.666.777.888 | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
555.666.777.888
Ich erinnere mich, dass wir mehrere Lösungen für IPv4 und IPv6 gefunden haben, aber keine optimal traf (zumindest, wenn ma es kurz und knapp halten möchte). Probleme bereiteten u.a. Wortgrenzen.tobo hat geschrieben:26.02.2024 18:36:22Es gab hier vor kurzem einen ausführlichen RegEx-Thread dazu, der sich dem Problem einigermaßen angenommen hat. Ich finde den aber jetzt gerade nicht, Livingston vielleicht schon.
Neben dem bekannten Format sind Angaben in anderen Zahlensystemen auch zugelassen (mindestens oktal und hexadezimal). Dazu kämen inhaltliche Prüfungen (reservierte Bereiche, lokale Netze, Multicast-Adressraum, usw.)tobo hat geschrieben:26.02.2024 18:36:22Eine RegEx zur "Validierung" von IP-Adressen ist jedenfalls überall im Internet zu finden - die geht dann jedoch deutlich über ein paar Zeilenlängen hinaus.
Grob: Es macht einen Unterschied, ob ich eine IP-Adresse validieren will oder ob ich in einem Text mit validierten IPv4-Adressen diese finden will. Denn mit Zahlen <256 ist es nicht ansatzweise getan...
Code: Alles auswählen
#!/bin/bash
#Überprüft IPv4-Adresse im ersten Argument auf Gültigkeit
myip=( $(echo $1|tr "." " ") )
for i in ${myip[*]}; do
if [ $i -gt 255 ]; then
echo "War wohl nix :P"
exit 1
fi
done
echo "Adresse gültig"
Code: Alles auswählen
$ ./t.sh 1.2-3
./t.sh: line 6: [: 2-3: integer expression expected
Adresse gültig
$
Per RegEx kann das schnell ausarten...https://de.wikipedia.org/wiki/IPv4#Adressformat hat geschrieben:Eine IPv4-Adresse kann in dezimal, binär, oktal und hexadezimal sowohl in der Punkt- als auch in der Nichtpunktnotation dargestellt werden.
War auch nur als einfaches Beispiel gedacht. Lässt sich natürlich beliebig erweitern.tobo hat geschrieben:27.02.2024 18:59:18Wobei man vielleicht auf 4 Werte und die dann gegen True und nicht gegen False prüfen sollte!?Code: Alles auswählen
$ ./t.sh 1.2-3 ./t.sh: line 6: [: 2-3: integer expression expected Adresse gültig $