
Hallo Liste, Ich wende mich mal wieder wegen einem sed-Problem an Euch: Zunächst bedanke ich mich bei Bernd für die Mail vom 06.03.2002. Es ist eine der Sorte: LaTex rüber, binden lassen und als Buch verkaufen ! Problem: Ich habe eine Text-Datei, die recht gross ist. In dieser ist eine ZEILE, die mit einem STRING beginnt. Auf diesen STRING folgt eine unbestimmte Anzahl von Leerzeichen (\t und ähnliches). Jetzt folgt eine Zahl - genau die will ich haben ! Beisp.: ZEILE ist: <begin> Dies ist der String: 123456789 <end> Laut Anleitung von Bernd Bernd Brodesser wrote: [...] und sonst gekürzter Fassung:
Es gibt da noch etwas, nämlich:
[[:alpha:]] steht für einen beliebigen Buchstaben. Genaugenommen steht [:alpha:] innerhalb der [...] Klammer für einen beliebigen Buchstaben. Es geht mithin auch [[:alpha:]23] was für einen beliebigen Buchstaben, 2 oder 3 gelten würde. Außer [:alpha:] gibt es natürlich noch anderes, nämlich:
[:alpha:] für Buchstabe [:blank:] für Leerzeichen und Tab [:cntrl:] für ein Kontrollzeichen, eines der ersten 64 ASCII-Zeichen. [:digit:] Eine Ziffer 0-9 [:graph:] alles außer Kontrollzeichen und Blanks. [:space:] Neben Leerzeichen und Tab auch Seitenvorschub u.ä.
Mit diesen \{...\} kann man zwar alles machen, aber doch recht umständlich. Daher gibt es ein paar Abkürzungen:
* ist das Gleiche wie \{0,\} also beliebig viele, auch Null mal. + ist das Gleiche wie \{1,\} also beliebig viele, aber mindestens ein mal. ? ist das Gleiche wie \{0,1\} also höchstens einmal.
Ich nehme \([:blank:]*\), um beliebig mehrfaches Vorkommen von blank-Zeichen zu erkennen.
Weiter kann man auch Gruppieren, und zwar mit \(...\)
Wenn es mehere \(..\) in dem Suchmuster gibt, so steht \1 für die erste Klammer, \2 für die zweite usw.
Jo, will ich nutzen also: cat test.txt | sed 's/.*Dies ist der String:\([:blank:]*\)\([1-9]*\)/\3/g' Leider führt das nicht zum gewünschten Ergbebnis: <Ausgabe> 123456789 </Ausgabe> Man beachte die voranstehenden Leerzeichen ! Die will ich nicht haben. Auch möchte ich die Text-Datei nicht zweimal durch sed schicken, einmal zum Leerzeichen entfernen, das zweite zum Suchen der Zahl. Ich würde es gerne in EINEM Kommando haben. Wer weiss Rat ?