Hallo auch, Am Montag, 26. April 2004 21:42 schrieb Ekkard Gerlach:
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. Wie lösche ich nur die kleinen Einheiten zwischen < und >?
BTW wozu? - Ich will in OpenOffice-Dokumenten Volltextsuche mit grep betreiben. Nach einem unzip text.sxw steht ein content.xml zur Verfügung mit vielen Formatierungsanweisungen zwischen den <..> - und die will ich weg haben. Oder geht es eleganter, mit XSLT habe ich so in Erinnerung?
Vorwarnung, ich bin eigentlich kein Scripter....aber versuch mal das: ############################# #! /bin/bash a='<' b='>' c='[^<]' i='1' while [ $i -lt 10 ]; do str=$a$c$b a=$a$c /usr/bin/sed s/$str//g /test/daten i=$[$i+1] done ############################# Nach meinen kleinen Tests klappts, wenn ich nix übersehen hab. Mußt die while-Schleife nur groß genug machen, das alle <..> erfasst werden. Bernd -- [Zufallssig 4] One OS to rule them all, one OS to find them. One OS to bring them all, and in the darkness bind them In the land of Redmond, where the shadows lie.