Hi, Am Montag, 5. März 2012, 21:12:35 schrieb Peter Schütt:
grep "%date:" mysource | sed -e 's/.*: \(.*\)/\1/g' So geht auf direkt auf der Kommandozeile. Allerdings verstehe ich den regulären Ausdruck nicht so richtig.".*: " soll "%date: " erwischen, das ist klar, aber das dahinter ist mirnicht so klar,
".*:" matched auf eine beliebig lange Zeichenkette aus beliebigen Zeichen, die von einem ":" abgeschlossen werden, von daher auch auf "%date:", das ist richtig. () bildet in regulären Ausdrücken eine Gruppe, hier mit dem Escape-Zeichen "\", also: "\(\)". Dazwischen steht wieder ".*"; das bedeutet also eine beliebige Zeichenkette, die *nach* der ersten, gerade beschriebenen, aber innerhalb derselben Zeile steht. Unter sed (und auch vi, und...) steht nun \#, wobei # eine beliebige natürliche Zahl ist, für eine Gruppe. In dem RegEx ist nur eine Gruppe definiert, nämlich die gerade beschriebene Zeichenkette nach dem ":". Was also passiert, ist folgendes: Der RegEx sucht nach "$Zeichenkette:$nocheineZeichenkette" und ersetzt dies durch "$nocheineZeichenkette". Wenn es mehrfach pro Zeile vorkommt, dann auf der ganzen Zeile, dies bewirkt das "/g".
HTH -- MfG Jan