Hallo, Am Thu, 26 Aug 2004, Axel Heinrici schrieb:
On Wednesday 25 August 2004 18:26, David Haller wrote:
Ohne Leerzeichen ginge es z.B. auch so. (auch wenn es eine nützliche Angewohnheit ist immer die Hochkommas zu setzen zu machen) sed -e /AB HIER/a\ Hier_die_neue_Zeile < datei > ausgabedatei
Das wird nicht funktionieren.
Denn den einzelen Backslash frisst die shell auf. [..] Gerade nochmal ausprobiert mit bash: Skript namens Zeilenfortsetzung <===================== #!/bin/bash
sed /zweite/a\ Einsubtext\ \ mit\ Fortsetzung =====================> $> echo -e "erste Zeile\nzweite Zeile\ndritte Zeile" |./Zeilenfortsetzung erste Zeile zweite Zeile Einsubtext mit Fortsetzung dritte Zeile
$ echo -e "erste Zeile\nzweite Zeile\ndritte Zeile" | sed /zweite/a\
Einsubtext\ \ mit\ Fortsetzung sed: -e expression #1, char 10: Extra characters after command
\<newline> wird von der shell erkannt und nicht an sed weitergeleitet. Aber die beiden Zeilen werden dann von der bash an sed auch ohne backslash und eben auch ohne <newline> übergeben. Damit ist doch alles wieder in Ordnung.
Eben nicht. sed verlangt die backslashes (s.u.). Deswegen muss man diese auch angeben, wenn man die Expression quoted: $ echo -e "erste Zeile\nzweite Zeile\ndritte Zeile" | sed '/zweite/a
Einsubtext mit Fortsetzung' sed: -e expression #1, char 10: Extra characters after command
$ echo -e "erste Zeile\nzweite Zeile\ndritte Zeile" | sed '/zweite/a\ Einsubtext\ mit Fortsetzung' erste Zeile zweite Zeile Einsubtext mit Fortsetzung dritte Zeile Das ist auch der Grund, warum selbst bei dir der Zeilenumbruch bei der " mit Fortsetzung" ignoriert wird.
Geht (zumindest bei GNU sed) doch auch? Benutzt du einen anderen sed oder eine andere shell? Ich habe sed 3.02.80 und bash 2.05b.0(1).
GNU sed 3.02, GNU bash 2.03.0(1) (an der bash liegt's aber nicht). Dass der Backslash hinter dem 'a'-Befehl weggelassen werden kann (und weswegen bei dir keine Fehlermeldung kommt) ist eine Eigenheit von GNU sed >= 3.02.80. Mit jedem anderen sed fliegt dir so ein script um die Ohren. Und auch dein GNU sed behandelt den Backslash richtig, wenn man ihn einfuegt (siehe mein zweites Beispiel), d.h. das wird auch bei dir richtig funktionieren. -dnh -- Treffen sich zwei Viren im Outlook. Meint der eine "eigentlich bin ich ja Künstler..."