silverspirit
Goto Top

RegEx Stringanfang + Ende mit Zeilenumbruch

Hi,
ich möchte gerne folgende Strings aus einer großen Textdatei extrahieren welche so lauten:

CREATE TABLE blablba
blu
blu
;
anderer text...

Ich bekomme entweder nur die erste Zeile oder die vierte zeile zurück wenn ich den Ausdruck einzeln ausführe, füge ich beide zusammen (start und ende) kommt kein Ergebnis. Wie klappt das trotz des Zeilenumbruches ?

^CREATE ;$

Ich mache das ganze mit Windows Grep, oder auch grep in der Kommandozeile (unixtools)

Content-ID: 248935

Url: https://administrator.de/contentid/248935

Ausgedruckt am: 24.11.2024 um 06:11 Uhr

colinardo
colinardo 11.09.2014 aktualisiert um 16:13:45 Uhr
Goto Top
Moin,
z.B. so:
grep -P "^CREATE [\s\S]+?^;$" datei.txt
konnte ich gerade nur unter Linux testen ... (-edit- läuft auch unter Windows)

Grüße Uwe
silverspirit
silverspirit 11.09.2014 um 16:32:21 Uhr
Goto Top
Danke, aber es findet irgendwie kein Ergebnis, ich mache es so:

grep -E "^CREATE [\s\S]+?^;$" san_db_test.sql
colinardo
colinardo 11.09.2014 aktualisiert um 16:44:48 Uhr
Goto Top
Zitat von @silverspirit:

Danke, aber es findet irgendwie kein Ergebnis, ich mache es so:
grep -E "^CREATE [\s\S]+?^;$" san_db_test.sql
mit extended regex geht das obige nicht, nur mit Perl-Regex (-P)
silverspirit
silverspirit 11.09.2014 um 20:02:05 Uhr
Goto Top
die -P funktion unterstützt mein grep aus Unixtools auf einen windows server nicht

D:\xyz\dbtmp>grep --help
Usage: grep [OPTION]... PATTERN [FILE] ...
Search for PATTERN in each FILE or standard input.
Example: grep -i 'hello world' menu.h main.c

Regexp selection and interpretation:
-E, --extended-regexp PATTERN is an extended regular expression
-F, --fixed-strings PATTERN is a set of newline-separated strings
-G, --basic-regexp PATTERN is a basic regular expression
-e, --regexp=PATTERN use PATTERN as a regular expression
-f, --file=FILE obtain PATTERN from FILE
-i, --ignore-case ignore case distinctions
-w, --word-regexp force PATTERN to match only whole words
-x, --line-regexp force PATTERN to match only whole lines
-z, --null-data a data line ends in 0 byte, not newline

die anderen optionen habe ich ausprobiert, mit selben ergebnis.
colinardo
Lösung colinardo 11.09.2014, aktualisiert am 12.09.2014 um 12:41:57 Uhr
Goto Top
Nehm das grep hier, das unterstützt die Perl Extension:
http://gnuwin32.sourceforge.net/packages/grep.htm

Oder pcregrep - das normale Grep mit extended Regex hat kein Multiline-Pattern-Matching, das geht nur mit der PERL-Syntax.

Grüße Uwe

btw. du hast das ganze ja auch in der PERL-Kategorie gepostet face-wink dann besorg dir auch die richtigen Tools.
silverspirit
silverspirit 12.09.2014 um 12:41:52 Uhr
Goto Top
mit dem verlinkten Grep hat es nun prima geklappt.
Vielen Dank hierfür !!!

Gruß
Rainer


ps, da es keine kategorie für reguläre ausdrücke gibt, dachte ich PERL dürfte am besten dafür passen.