PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regular Expressions



masa069
22.07.09, 12:37
Hallo,

ich kapiere einfach folgendes Verhalten nicht:




host:~# cat bla
abcdefghijklm
3844gfe34

host:~# grep [^a] bla
abcdefghijklm
3844gfe34
host:~# grep [^a-z] bla
3844gfe34
host:~#






[^a] heisst doch alle ZEILEN in den KEIN "a" vorkommt, oder wo habe ich da den Fehler? Und wieso beim 2. Beispiel der Match für abcdefghijklm aber nicht für 3844gfe34?

Ich dachte mal, ich hätte das kapiert.... :(

Aufgekommen ist die Frage durch die Sache mit den Kommentarzeilen in Dateien: grep ^[^#] funktioniert wunderbar, ich möchte aber auch Zeilen raushaben, wo das "#" nicht am Anfang steht und würde dann [^#] benutzen wollen - warum geht das nicht?

Bitte erleuchtet mich! *schnief*


Gruss,

masa

asi_dkn
22.07.09, 12:48
du hast da etwas nicht ganz richtig verstanden.

[^a] heisst "Matche alles ausser dem a". Da die Zeile aber andere Zeichen enthält wird sie aufgeführt... du suchst eher ^[^a]. Das heisst "zeige alle Zeilen die nicht mit einem a beginnen.

bei [^a-z] heisst das "Mathce alles ausser den kleinen Buchstaben". Da die Zeile aber nicht nur Buchstaben sondern Zahlen enthält die matchen, wird die Zeile angezeigt.

Versuche mal folgendes:

grep --color=auto [^a] bla

Dann siehst du was grep matcht und was nicht, das dürfte dir helfen.

m.o.o.
22.07.09, 12:55
Der Ausdruck [^a] beschreibt nur ein einzelnes Zeichen und sagt kein "a". In der Zeile "abcdefghijklm" schlägt er also beim zweiten Zeichen an -> grep gibt die Zeile aus.
[^a-z] beschreibt auch wieder nur ein Zeichen mit der Eigenschaft, das dieses Zeichen nicht a, b, ..., z sein darf. In der Zeile "3844gfe34" schlägt der Ausdruck beim ersten Zeichen an -> grep gibt die Zeile aus.

Um alle Zeilen zu filtern, in denen a vorkommt würde ich


grep -v a bla

schreiben.

Gruß, Florian

EDIT: Doppelt hält besser :)

masa069
22.07.09, 13:05
Versuche mal folgendes:

grep --color=auto [^a] bla

Dann siehst du was grep matcht und was nicht, das dürfte dir helfen.


Ausgeführt -> an die Stirn geschlagen.

Vielen Dank!