Hi David! On Mi, 23 Sep 2009, David Haller wrote:
Ist gar nicht so schwierig:
Da wäre ich mir nicht so sicher ;)
sed -n ' /<!--START-->/,/<!--ENDE-->/ { H; }; /<!--ENDE-->/ { x; s/<!--START-->.*<!--ENDE-->//; p; q; }'
#v+ ~$ sed ':' foobar 1111<!--START-->ccccc<!--ENDE-->99999<!--START-->bbbbb<!--ENDE-->aaaa 3333<!--START-->bbbb bbbb bbb b<!--ENDE-->6666 letzte Zeile ~$ sed -n ' /<!--START-->/,/<!--ENDE-->/ { H; }; /<!--ENDE-->/ { x; s/<!--START-->.*<!--ENDE-->//; p; q; }' foobar 1111aaaa ~$ #v- Das Problem ist wohl das q command. Das sollte wohl ein n sein? Und dann werden auch noch nicht die Zeilen ausgegeben, die außerhalb eines Start/Stop Blocks stehen. Oder sollte das nur das erste Start/Ende Vorkommen ersetzen? Das hier funktioniert dagegen bei meinen kurzen Tests, ist aber auch nicht gerade schön: #v+ ~$ sed ' /<!--START-->/{ b loop } :loop { /<!--ENDE-->/b subst N b loop } :subst { s/<!--START-->.*<!--ENDE-->// }' foobar 1111aaaa 33336666 letzte Zeile ~$ #v- Und dann hat man immer noch das Problem mit der Greediness. Ich glaube für Multiline-Patterns sollte man eher auf eine richtige Scriptsprache zurückgreifen. Mit awk sollte das ziemlich einfach zu machen sein (und vor allem viel lesbarer! Aber awk kann auch keine non-greedy Patterns, oder?) Oder natürlich Perl. Den Einzeiler hatten wir ja schon ;) (Aber wie geht es in Perl, wenn man nicht die komplette Datei einlesen will?) Mit freundlichen Grüßen Christian -- :wq! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org