Thoralf Knuth: (e|f|)grep vs. pregmatch

Beitrag lesen

Hallo Frank,

erstmal besten Dank für die Antwort.

Also du musst auf jeden Fall egrep aufrufen, da das ein erweiterter
regulärer Ausdruck ist.

Yep, das hab ich mir schon gedacht, aber wenn's nicht klappt, dann fängt man halt an zu probieren. ;)

Und offensichtlich bist du etwas über die Zeichenklassen gestolpert:

Versteh im Moment nicht, was Du meinst, bin aber in Sachen Regular Expressions grade erst dem Anfängerstadium etwas entwachsen. Ich seh, dass Du die Gruppierungen rausgenommen hast, die ich eben für die Backreferences noch drin hatte, im Nachhinein ist das logisch, dass das für bloßes Suchen nicht funktionieren kann.

Most metacharacters lose their special meaning inside lists.  To
  include a literal ] place it first in the list.  Similarly, to
  include a literal ^ place it anywhere but first.  Finally, to
  include a literal -  place it last.

Was meinst Du damit, ist ein Auszug aus man grep, soweit ich das sehe. Aber ich versteh im Moment den Zusammenhang nicht. Wenn Du die Muße hast, könntest das mal einen Tick ausführlicher (juristentauglicher ;)) erklären. Ich lerne durch dieses Suchen und Nachvollziehen nämlich eine Menge. Danke!

egrep '[1]+ [^ ]+ [^ ]+ [[^]]+] ".*" [0-9-]+ [0-9-]+ subdomain.test.de ".*" ".*" ".*"' access-log

holpert dann immer noch am optionalen www vor dem vhost, aber wenn das Backreferencing nicht geht, womit ich gerechnet habe, dann nutzt das bloße grepen letzlich eh nichts mehr, dann werd ich das doch mit Script machen, das klappt nämlich. :)

Du kannst ja keine Backreferences aus dem grep nach draußen weitergeben,
um dadurch irgendwelche Dateinamen zu beeinflussen (das wäre ja nicht
mal ein grep-Parameter, sondern das Ziel einer >-Umleitung).

Das hab ich fast erwartet, deswegen Fernziel. Soweit ich das überblickt hatte, war mir klar, dass es nicht geht. Ich war nur eben nicht sicher, ob ich es wirklich komplett überblicke, oder ob ich einfach nicht weit genug schauen kann. ;)

Die einfachste Lösung wäre IMHO, ein kleiner Skript zu schreiben, das
diese Aufgabe erledigt. In Perl zb. wäre das etwa ein Zehnzeiler.

Für Perl bin ich zu doof, PHP läuft das aber schon. :)

Danke!

Thoralf

--
Sic Luceat Lux!

  1. ^ ↩︎