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-Key: 248935

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

Printed on: April 20, 2024 at 15:04 o'clock

Member: colinardo
colinardo Sep 11, 2014 updated at 14:13:45 (UTC)
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
Member: silverspirit
silverspirit Sep 11, 2014 at 14:32:21 (UTC)
Goto Top
Danke, aber es findet irgendwie kein Ergebnis, ich mache es so:

grep -E "^CREATE [\s\S]+?^;$" san_db_test.sql
Member: colinardo
colinardo Sep 11, 2014 updated at 14:44:48 (UTC)
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)
Member: silverspirit
silverspirit Sep 11, 2014 at 18:02:05 (UTC)
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.
Member: colinardo
Solution colinardo Sep 11, 2014, updated at Sep 12, 2014 at 10:41:57 (UTC)
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.
Member: silverspirit
silverspirit Sep 12, 2014 at 10:41:52 (UTC)
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.