Ich lerne die verschiedenen Befehle von sed und habe einige Experimente durchgeführt. Der Befehl, den ich versuche, ist:
root:[~]# seq 7 | sed -n '1~2H; 2~2{G;p}'
2
1
4
1
3
6
1
3
5
root:[~]#
Ich habe den Befehl analysiert und für mich sollte das letzte Zeilenumbruchzeichen nach der Nummer 5
nicht existieren. Unten ist meine Analyse.
Basierend auf meiner Analyse sollte die Ausgabe die Zellen mit dem roten Hintergrund sein. Wie Sie sehen können, gibt es kein letztes Zeilenumbruchzeichen. Wo irre ich mich Danke im Voraus.
seq
auf 8 erhöhen . Sie werden sehen, dass es nach 5 keine neue Zeile gibt.Antworten:
p
fügt das Zeilenumbruchzeichen hinzu:Wie zu sehen ist,
2
wird das ohne nachgestellte Zeilenumbruch gedruckt, aber die 1 davorp
ist von.quelle
sed
möglicherweise auch eine neue Zeile hinzufügt, selbst wenn die Eingabe keine neue Zeile enthält (eine nicht terminierte Zeile ist keine gültige Eingabe für den Standardsed
).Ich glaube, ich habe die Antwort gefunden. In der Dokumentation des POSIX sed unter https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html heißt es:
Das bedeutet, dass der
p
Befehl immer sowohl den Musterbereich als auch eine neue Zeile druckt. Das erklärt auch , warum es Zeilenumbrüche nach2\n\n1
,4\n\n1\n3
und6\n\n1\n3\n5
.Bitte korrigieren Sie mich, wenn Sie der Meinung sind, dass daran etwas nicht stimmt. Vielen Dank.
quelle