BSD sed
gibt bei l
der Ausgabe von Zeichen in einer visuell eindeutigen Form keine Zeilenumbrüche in einer visuell eindeutigen Form aus.
Von sed (1) auf OpenBSD:
[2addr]l
(The letter ell.) Write the pattern space to the standard output
in a visually unambiguous form. This form is as follows:
backslash \\
alert \a
backspace \b
form-feed \f
carriage-return \r
tab \t
vertical tab \v
(Beachten Sie die fehlende Erwähnung von Zeilenumbrüchen).
GNU sed
enthält jedoch Zeilenumbrüche in den Zeichensatz, die eindeutig angezeigt werden sollen. Dies ist eine Erweiterung des Zeichensatzes, den der POSIX-Standard fürsed
Erwähnungen verwendet (der Satz, den BSD sed
verwendet). GNU sed
verhält sich auch dann so, wenn --posix
es in der Befehlszeile verwendet wird.
GNU sed
gibt auch 10
zweimal aus, BSD sed
nicht. Wenn Sie GNU sed
mit POSIXLY_CORRECT
set oder mit --posix
ausführen, wird es 10
nur einmal ausgegeben , wie dies bei BSD der sed
Fall ist.
Dies liegt daran, dass GNU sed
standardmäßig den Teil der POSIX-Definition des sed
N
Befehls ignoriert, der besagt
Wenn keine nächste Eingabezeile verfügbar ist, N
verzweigt das Befehlsverb zum Ende des Skripts und wird beendet, ohne einen neuen Zyklus zu starten oder den Musterbereich in die Standardausgabe zu kopieren.
Beachten Sie auch, dass das p
in Ihrem sed
Programm niemals ausgeführt wird, da D
ein neuer Zyklus beginnt.
$!N
anstattN
wann-n
nicht aktiviert ist.\n
das von angezeigte GNU sed wrt verhältl
. Ich vermute, dass die POSIX-Anforderung hier ein Versehen ist (sie sagen, dass sie nicht anwendbar ist, was hier keinen Sinn ergibt. Ich vermute, dass sie dies sagen, weil der Musterbereich normalerweise standardmäßig keine Zeilenumbrüche enthält, aber die Tatsache übersieht, dass sie von hinzugefügt werden können N, G, s ...; wenn sie das ursprüngliche sed-Verhalten fordern wollten, hätten sie gesagt, dass so etwas wie Newline buchstäblich ausgegeben werden soll oder so etwas)