ubuntuusers.de

Komplexes Regex und grep

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

mexmirror

Anmeldungsdatum:
25. Oktober 2013

Beiträge: 8

Hallo zusammen

Nachdem ich nun schon das fünfte mal daran scheitere, mit grep eine Datei mit regulären Ausdrücken zu filtern, hoffe ich dass man mir hier weiterhelfen kann. Ich bin noch ein Regex Anfänger, und bastle mir meist mit Online Regex Testern meinen Such String. Dieses mal möchte ich diene Datei mit absoluten Pfaden, nach dem letzten Teil des Pfades, sprich der Datei, filtern.

/home/user/folder/file.txt
/home/user/filder/config.conf

Mein Regex sieht so aus:

[A-z]*["."][A-z]*

Schlussendlich möchte ich einfach eine Liste von Dateien ausgegeben bekommen. Doch grep mag irgendwie die eckigen Klammern nicht denn egal wie ich es drehe, es gibt mir immer folgenden Fehler zurück

grep: Das Ende des angegebenen Intervalls ist nicht gültig

Soviel ich bis jetzt herausgefunden habe, sollte dieser Befehl eigentlich funktionieren.

1
grep -E "/[A-z]*["."][A-z]*/g"

Ich komme aber leider nicht darauf was ich falsch mache.

lg mexmirror

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Hm, willst Du unbedingt grep verwenden? Ansonsten nimm doch einfach folgendes:

 while read line; do basename $line; done < <(cat test.txt)

hier musst Du natürlich den Dateinamen test.txt entsprechend ersetzen. Und zu deiner Regexp: Da müsstest Du ["."] einfach durch . oder \. ersetzen, dann sollte das gehen, bin ich mir gerade aber auch nicht sicher. Das [A-z] ist jedenfalls auch nicht so glücklich, denn dort ist dann nichts enthalten, was Nummern, Underscores und Ähnliches enthält.

mexmirror

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2013

Beiträge: 8

Hi

Danke erstmal für die schnelle Antwort, die while Schleife hat funktioniert. ☺ Da ich eigentlich immer alles versuche um nicht regex und grep zu verwenden, reicht mir diene Lösung vollkommen. Es würde mich aber trotzdem interessieren, wie man das richtig macht. Ich hatte dieses Problem schon einige male. Mein Ziel ist es mit cat und dem Regex den Inhalt nach den Ausdrücken zu filtern.

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Das müsste dann so aussehen:

grep -E -o "[a-Z]*\.[a-Z]*$" test.txt 

Deine Fehlermeldung mit dem Intervall kam, weil die Kleinbuchstaben vor den großbuchstaben im Intervall angegeben werden müssen. Das -o sorgt dafür, dass nur der gefundene Ausdruck ausgegeben wird, das $ steht für das Ende der Zeile, der backslash vor dem Punkt ist als Escapezeichen da, denn sonst würde der Punkt als ein beliebiges zeichen interpretiert. Aber wie gesagt, so bekommst Du dann auch wirklich nur Dateien, die, abgesehen vom Punkt, nur Buchstaben enthalten...

mexmirror

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2013

Beiträge: 8

Super. Vielen dank. ☺ Ja das ist auch genau das was ich wollte 😉

lg mexmirror

Antworten |