2017-02-18 3 views
0

Ich versuche, eine IP-Adresse aus einem Text zu extrahieren, und verstehe nicht das Ergebnis entsprechend der Regex, die ich schreibe. Apparantly dies:Sed-Ausdruck für IP-Adresse, erhalten unerwartetes Ergebnis für übereinstimmende Gruppe

echo '"IPAddress": "173.14.0.3",' | sed -n -r -e 's/"IPAddress": "(.*)"/\1/p' 

kehrt

173.14.0.3, 

Warum erhalte ich die , am Ende? Gibt "(.*)" den Regex nicht an, um eine übereinstimmende Gruppe von allem zwischen den letzten zwei " zu erstellen?

Ursprünglich begann ich mit

aus
echo '"IPAddress": "173.14.0.3",' | sed -n -r -e 's/"IPAddress": "([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})"/\1/p' 

, bekam aber gleiches Ergebnis. Ich habe regex101 verwendet, und da bekomme ich eine andere Antwort. Warum?

+0

regex101 unterstützt die regulären Ausdrücke von sed nicht. Sie können es nicht für sed verwenden. – hek2mgl

+0

Ist die Eingabe ein JSON-Dokument? – hek2mgl

+0

@ hek2mgl Ja, aber ich interessiere mich mehr dafür, wie sed funktioniert. Ich weiß, es gibt bessere Möglichkeiten, Json zu parsen. – erihanse

Antwort

2

Ihre Eingabe:

input:   "IPAddress": "173.14.0.3", 
matched by regex: ^^^^^^^^^^^^^^^^^^^^^^^^^ (note: comma not matched) 
captured:      ^^^^^^^^^^ 

Das angepasste Teil durch die erfassten Teil ersetzt wird und wieder in die ursprüngliche Zeichenfolge ersetzt, wodurch man

result:  173.14.0.3, 
not affected:   ^
replacement: ^^^^^^^^^^ 

Wenn Sie das Komma loswerden wollen, Fügen Sie es in die Übereinstimmung ein (so wird es durch nichts ersetzt):

regex101 s Hows das gleiche Verhalten: https://regex101.com/r/Fy5Lj3/4

+0

Auch wenn es in diesem Fall gleich aussieht, regex101 unterstützt keine reguläre Posix-Expression und kann nicht als Referenz verwendet werden – hek2mgl

+0

@ hek2mgl Nicht allgemein, richtig. Aber in diesem Fall ist es nur '. *' Und das Verhalten ist das gleiche. – melpomene

+0

Das ist immer noch * sehr * irreführend, wenn man das einem Anfänger gibt. Sie hätten das erklären müssen, denn Sie sehen, dass das OP das nicht weiß. – hek2mgl

0

Allgemeine Hinweise: regex101.com tut nicht Unterstützung regulärer Ausdrücke Sprachen von sed unterstützt. Diese werden in der POSIX Spezifikation erläutert.

Während einfache Dinge vielleicht ähnlich aussehen, Ausdrücke unterscheiden sich deutlich im Detail. Verwenden Sie nicht Regex101 bei der Arbeit an regulären Ausdrücken für sed.

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/15257373) –

+0

Dem widerspreche ich in diesem speziellen Fall. – hek2mgl

+0

Die Frage, die gestellt wird, ist _ "Warum bekomme ich die, am Ende?" _ Die Verwendung von regex101.com ist tangential zu der Frage, so dass Ihre "Antwort" sollte ein Kommentar sein. –

Verwandte Themen