Hallo,
ich bekomme es leider nicht selbst zustande... Prinzipiell weiß ich ja, wie reguläre Ausdrücke funktionieren, aber es zeigt sich einfach nicht das gedachte Verhalten.
Problem: In einem Shellskript steht mir in $line jeweils die aktuelle Zeile einer Textdatei zur Verfügung. Ich muß prüfen, ob diese Zeile die Form
"[mind. ein bel. Zeichen]:[mind. ein bel. Zeichen]:[mind. ein bel. Zeichen]:[bel. viele bel. Zeichen]:[bel. viele bel. Zeichen]"
hat. Insgesamt dürfen nur 4 Doppelpunkte in $line enthalten sein.
Ich habe es mit
echo ${line} | grep "...viele regexps, die nicht funzten..."
versucht, aber oft kam dabei nicht das heraus, was ich erwartet hatte. Der Rückgabewert war im Erfolgsfall die ganze Zeile, schöner wäre natürlich 0 bzw. 1.
Kann mir da jemand nen Tipp geben?
Vielen Dank im Voraus!
MfG
Mario
Regulärer Ausdruck in Shellskript
versuch mal etwas in der Art:
Las mich mal raten: Es handelt sich um eine CSV Datei?
Code: Alles auswählen
[^:]+:[^:]+:[^:]+:[^:]+:[^:]+
naja... in etwa so "comma-separated" wie das csv-format von excel eben nicht durch kommas, sondern durch doppelpunkte. das scheint schonmal zu funktionieren, muß nur anfang und ende der zeile noch kennzeichnen, sonst akzeptiert er die zeile auch, wenn danach bzw davor noch andere zeichen kommen, insbesondere weitere doppelpunkte.
Ist nicht weiter schwehr Zeilenanfang und Ende zu markieren:
Auch wenn CSV "Comma Separated Values" bedeutet kannman jedes belibige Zeichen als trenner verwenden, sofern es nicht in den Elemeten vorkommt.
Code: Alles auswählen
^[^:]+:[^:]+:[^:]+:[^:]+:[^:]+$