Hi On Monday 26 April 2004 21:42, Ekkard Gerlach wrote:
Es soll aus einer sehr langen Zeile alle Vorkommen von <beliebiger Text> gelöscht werden. Der Text dazwischen soll ausgegeben werden.
Bsp: aus <xxxxxx> diesen Text <yyyyyy> ausgeben <zzzzzz> soll 'diesen Text ausgeben' werden.
Mit: echo <xxxxxx> diesen Text <yyyyyy> ausgeben <zzzzzz>
| sed 's/<.*>//g'
werde ich aber leider nicht glücklich. Es wird das erste '<' und letzte '>' im String gewählt, die Ausgabe ist leer. Erklärung: * ist greedy (dt. gierig). Das nimmt sich erstmal alles bis zum Ende des Strings. Erst dann wird von hinten Zeichen für Zeichen "weggenommen" bis der Rest der regex passt.
Wie lösche ich nur die kleinen Einheiten zwischen < und >? Matche nicht auf jedes beliebige Zeichen mit "." sondern auf alles außer ">" mit "[^>]" (quoten im normalen Sprachgebrauch ist auch nicht leicht :-) ).
~>echo "<xxxxxx> diesen Text <yyyyyy> ausgeben <zzzzzz>"| sed 's/<[^>]*>//g' diesen Text ausgeben Das ist von den Leerzeichen her natürlich nicht besonders toll. Wenn nach jeder ">" ein " " folgt, dann geht ein "sed 's/<[^>]*> //g'" Sonst müssen mit einer weiteren sed-Zeile noch die doppelten Leerzeichen durch einfache ersetzt werden. mfg Axel