grep mit regexp: Leerzeichen nicht überein, es sei denn ich füge eine Behauptung
GNU-grep-2.5.4 auf bash 4.1.5(1) auf Ubuntu 10.04
Dies entspricht
$ echo "this is a line" | grep 'a[[:space:]]\+line'
this is a line
Aber nicht
$ echo "this is a line" | grep 'a\s\+line'
Aber das passt zu
$ echo "this is a line" | grep 'a\s\+\bline'
this is a line
Ich verstehe nicht, warum #2 stimmt nicht überein (während # 1 tut) und #3 zeigt auch eine übereinstimmung. Was ist hier der Unterschied?
bei mir klappt es mit GNU grep 2.8 $ echo "dies ist eine Zeile" | grep 'a\s\+Zeile' ; echo $? dies ist eine Zeile 0
2 und 3 arbeiten nicht für mich (GNU grep-2.5.1)
Alle drei arbeiten für mich: Cygwin mit GNU grep 2.6.3
Ich bin mehr daran interessiert zu wissen, warum #2 nicht entsprechen, aber #3 hat. Eine zusätzliche null-Breite assertion (word boundary) macht solch einen Unterschied ?
Da der Fehler in grep-2.5 mal hier: [Grep white-space-Verhalten][1] [1]: stackoverflow.com/questions/4233159/...
2 und 3 arbeiten nicht für mich (GNU grep-2.5.1)
Alle drei arbeiten für mich: Cygwin mit GNU grep 2.6.3
Ich bin mehr daran interessiert zu wissen, warum #2 nicht entsprechen, aber #3 hat. Eine zusätzliche null-Breite assertion (word boundary) macht solch einen Unterschied ?
Da der Fehler in grep-2.5 mal hier: [Grep white-space-Verhalten][1] [1]: stackoverflow.com/questions/4233159/...
InformationsquelleAutor abc | 2011-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf Ihre
grep
manpage. Perl hat eine Menge regulärer Ausdruck Erweiterungen, die nicht in der ursprünglichen Spezifikation. Jedoch, weil Sie sich als so nützlich, viele Programme verabschiedet.Leider
grep
manchmal stecken in der Vergangenheit, weil Sie wollen sicherstellen, dass Ihregrep
Befehl bleibt kompatibel mit älteren Versionen vongrep
.Einige Systeme haben
egrep
mit einigen Erweiterungen. Anderen erlauben, Sie zu verwendengrep -E
um Sie zu bekommen. Noch andere haben eingrep -P
, ermöglicht die Nutzung von Perl-Erweiterungen. Ich glaube, dass Linux-Systeme' grep-Befehl verwenden können, die-P
- Erweiterung, die in den meisten Unix-Systemen, es sei denn, jemand ersetzt hat, die dem grep mit der GNU-version. Neuere Versionen von Mac OS X unterstützen auch die-P
- switch, aber nicht mit älteren Versionen.Tatsächlich, beide arbeiten Sie für #2 und #3 mir. Ich Tat dies auf Cygwin und auf der neuesten Version von Ubuntu-Linux auf Virtual Box auf meinem PC. Ich habe nicht versucht es auf meinem Mac zu Hause. Weder die Arbeit an unserer Solaris-system, da es nicht die GNU-version von
grep
und nicht erkennt alles außer die sehr einfache regex. Gibt es etwas in diesem weiten, leeren Raum neben den Räumen? Ein tab-Zeichen, vielleicht?Ich versuchte es noch einmal. Aber es gibt keine tab-Zeichen gibt es. Das ist irgendwie rätselhaft und überraschend.
InformationsquelleAutor David W.
grep
unterstützt nicht den kompletten Satz von regulären Ausdrücken, so versuchen Sie mit-P
zu aktivieren perl reguläre Ausdrücke. Sie nicht brauchen, um die Flucht der+
d.h.InformationsquelleAutor dogbane