(AWK) Regulärer Ausdruck gesucht

takidoso

Erfahrenes Mitglied
Hallo,
fange gerade an mich mit AWK auseinanderzusetzen bin aber nicht sonderlich mit regulären Ausdrücken bewandert, daher habe ich nun ein kleines Problem damit.

ich möchte alles das finden, was ein { hat aber ohne vorangegegangenem ;

also um alles zu finden was eine geschweifte Klammer hat das geht ganz gut mit .*{.* nur wie bringe ich das mit dem nicht Semikolon davor hin?

für Vorschläge bin ich verdammt Glücklich und dankbar

Takidoso
 
Hallo,
Du musst den Quantor auf die Zeichenklasse anwenden, da sonst du direkt vor der Klammer kein Semikolon vorkommen darf:

ich dachte das war die Intention des Autors. So kann man sich taeuschen :)

Gruß,

RedWing
 
Gut, bei der etwas schwammigen Beschreibung könnte es auch ein Interpretationsfehler meinerseits sein. Warten wir mal auf die Antwort.
 
Hallo ihr beiden
also erstmal vielen Dank für Eure Vorschläge. Leider funktionierte beides nicht.
ich habe nun mal einiges ausprobiert und muss sagen, das Reguläre Ausdrück mir reichlch mystisch sind.

folgende Ausdrücke brachten mich zur identischen Ausgabe aus gabe wie mit .*{.*
.*[^;].*{.*
[^;].*{.*
[^;]*{.*



folgende Ausdrücke gaben überhaupt keine Ausgabe
.*[^;]{.*
[^;]{.*

tja dabei habe ich eigetnlich nur situationen wo mal eine geschweifte Klammer ohne und mal mit semikolon davor steht, ohne blanks dazwischen und das zu Begin einer Zeile.

Gibt es in RegExs eigentlich so etwas wie oder und und Verknüpfungen?
irgendwie ist das ganze in den Seiten in denen ich im Internet gestöbert habe nur sehr rudimentär erklärt mit einfachsten Beispielen :(

schade schade

Takidoso
 
Prinzipiell sind Reguläre Ausdrücke immer UND-verknüpft. Folgender Ausdruck passt nur, wenn „a“ und „b“ aufeinander folgen:
Code:
ab
Eine Disjunktion kann mit dem Senkrechten-Strich-Zeichen bestimmt werden:
Code:
a|b
Passt somit auf „a“ oder „b“.

Regenechsen.de haben zu Regulären Ausdrücken ein umfangreiche Dokumentation parat.
 
Hallo,

wenn du sed zur Verfuegung hast kannst du das ja mal ausprobieren:

Datei test.txt:
Code:
bdf;{bdf
;;{sss
{ssss
aaa{s
dddd
ss{ss

Dann:
Code:
sed -e 's/.*\([^;]\|^\){.*//g' test.txt
Ausgabe:
Code:
bdf;{bdf
;{sss


dddd
Also der Ausdruck
Code:
.*([^;]|^){.*
tuts bei mir auch fuer den Zeilenanfang...

Gibt es in RegExs eigentlich so etwas wie oder und und Verknüpfungen?

Schau doch mal @ gumbos wiki Link:
http://de.wikipedia.org/wiki/Regulärer_Ausdruck#Alternativen

Gruß,

RedWing
 
Hallo RedWig,
danke für Deine Beispiele und Anregungen. Ich habe nu wieder einiges ausprobiert und habe irgendwie das ganz imemrnoch nicht verstanden.
eigetnlich will nur die Zeilen haben, wo kein Semikolon vor einer geschweiften Klammer steht, d.h.

; sdfdf{ sdf soll nicht gellten
sdfdf ; ssfdd{ soll nicht gellten
;{ soll nicht gellten
; { soll nicht gellten
sdfjdfj soll nicht gellten

aber....
{
df fdf { dfdf
dfdf {
{ dfdf
{;

sollen gelten

in meinen bisherigen Versuchen auch mit Deinem Vorschlag bekomme ich nicht zufriedenstellendes
meist ist es so dass ;{ tatsächlch als verstanden wird aber ; { ist dann doch in den zutreffenden Lösungen eingebracht.
einer meiner letzten Versuche war
RegExp:
.*([^;].*|^)\{.*

Eingaben:
df {
{sdffd
;{ sdfdf
dfdf;
dfdf;{
dfdf ;{
ddf ; {
;{dfdf

Ergebnis:
df {
{sdffd
dfdf;{ sollte nicht drinn sein
dfdf ;{ sollte nicht drinn sein
ddf ; { sollte nicht drinn sein
;{dfdf sollte nicht drinn sein

Wie gesagt ich habe alles möglich da schon ausprobiert :( :confused:
offenbar für mich zu hoch zu sein.

ich glaube ich werde das mit einem seperaten if-statement lösen, welches stumpf schaut ob die position eines ; vor einem { gelegen ist

mit frustierten Grüßen

Takidoso
 
Hallo,

also ich hab das grad nochmal probiert...

test.txt:
Code:
df {
{sdffd
;{ sdfdf
dfdf;
dfdf;{
dfdf ;{
ddf ; {
;{dfdf
{as

Befehl:
Code:
awk '/.*([^;]|^){.*/ { print $0 }' test.txt

Ausgabe:
Code:
df {
{sdffd
ddf ; {
{as

Also wie du siehst bei mir funktioniert das wie erwartet...

Gruß,

RedWing
 
Zurück