grep verständnisproblem

tuxlover

tuxlover

Der den Tux knuddelt
Hallo ich hatte ja lange keine anfängerfragen mehr :P

Deswegen hier mal eine zu grep:

Ich habe eine Textdatei:

Code:
Hamburg
Aschaffenburg
Osterburg
Johannesburg
Rostock
Bremen
Berlin
Stuttgart
Dresden
Koeln
New York

Nun möche ich mir eine Regex basteln die mit __grep__ am Anfang nach A oder D und am Ende die Zeichenfolge en matched. Ich habe gedacht das würde mit folgender Regex funktionieren:

Code:
grep ^[BD].$en

und wird dann Dresden und Bremen matchen.

Stattdessen wird:
Code:
Aschaffenburg
Bremen
Berlin

gematcht. Wo ist denn hier der Denkfehler oder der Syntaxfehler?

Danke für euer Hilfe

matthias aka tuxlover
 
Zuletzt bearbeitet:
der $ sollte denke ich mal an's Ende - er steht ja schließlich für's Zeilenende...

Dann sollte wohl nach den . noch ein * - weil es ja nicht nur ein Zeichen zwischen dem AD / en stehen wird...

Ach übrigens - auf Bremen wird er mit A/D am Anfang sicherlich nicht matchen...
 
Zuletzt bearbeitet:
Hi,

ich verstehe dein Beispiel nicht ganz, weder Berlin noch Bremen beginnen mit einem A oder D... Wahrscheinlich meinst du [BD]?

Die Anker ^ und $ stehen allerdings fuer den Zeilenanfang und das Zeilenende, d.h. "$en" macht keinen Sinn, das kann per Definition nicht gehen, es muesste "en$" sein.

Ausserdem solltest du darauf achten dass das Suchmuster gequotet wird. In deinem ersten Versuch wuerde sonst ja $en durch die vermutlich leere Variable en ersetzt.

Ein alias den ich mit grep gerne benutze ist der hier:
Code:
alias grep='grep --color'
Dadurch zeigt dir grep die "gematchten" Teile farbig an.

Vermutlich suchst du diesen Ausdruck:
Code:
grep '^[BD].*en$'

mfg,
bytepool
 
Hi,

ich verstehe dein Beispiel nicht ganz, weder Berlin noch Bremen beginnen mit einem A oder D... Wahrscheinlich meinst du [BD]?

Die Anker ^ und $ stehen allerdings fuer den Zeilenanfang und das Zeilenende, d.h. "$en" macht keinen Sinn, das kann per Definition nicht gehen, es muesste "en$" sein.

Ausserdem solltest du darauf achten dass das Suchmuster gequotet wird. In deinem ersten Versuch wuerde sonst ja $en durch die vermutlich leere Variable en ersetzt.

Ein alias den ich mit grep gerne benutze ist der hier:
Code:
alias grep='grep --color'
Dadurch zeigt dir grep die "gematchten" Teile farbig an.

Vermutlich suchst du diesen Ausdruck:
Code:
grep '^[BD].*en$'

mfg,
bytepool

hi bitepool,

irgendwie habe ich gehofft dass du mir da weiterhelfen kannst. danke :)

das hat geklappt. und das mit --color hat ich schon herausgefunden und den alias auch schon gesetzt. danke trotzdem ;)

Ja und natürlich meinte ich BD. Ich ändere das mal

grüße matthias aka tuxlover
 
Zuletzt bearbeitet:
Dann änder das aber auch im Text :-) Du hast da eine Stelle vergessen.
Besonders wichtig waren die Hinweise mit dem einfachen Anführungszeichen und zum $-Zeichen.

^[BD].$en kann keinen Match ergeben, weil nachdem Ende definitionsgemäß kein en mehr kommen kann. In deinem Fall wurde aus $en aber wegen der fehlenden Quotes einfach nichts. Damit blieb nur noch
^[BD].. Damit wird jede Zeile gematcht, die am Anfang ein B oder D hat.

Das nur nochmal zum Verständnis, weils nicht so 100%ig klar war, weiter oben

EDIT: Übrigens, nach deinem EDIT ist der Eröffnungspost komplett nicht schlüssig, es passt weder deine Beschreibung zum Regex, noch der RegEx zum Suchergebnis.
 
Zurück
Oben