Mein sed-Skript ist dies:sed: Verhalten von H und D
# script.sed
1,3H
1,3g
3D
Wenn ich es laufen, erhalte ich folgendes:
$ seq 5 | sed -f script.sed
1
1
2
4
5
Doch dies scheint mir falsch. In Zeile 3, sobald der D-Befehl ausgeführt wird, weist der Musterraum
1
2
3
Wenn der Zyklus erneut gestartet wird, H den Halteraum setzen sollte:
<empty_line>
1
2
3
1
2
3
Dann g sollte eingestellt das Muster Leerzeichen zum selben Inhalt. D wird dann die erste (leere) Zeile entfernen. Jedes Mal, wenn der Zyklus neu gestartet wird, verdoppelt sich der Laderaum effektiv. Daher sollte dies zu einer Endlosschleife führen.
Was fehlt mir?
in Zeile 3 der 'D' Befehl löscht wiederholt bis und jede Zeile in dem Musterraum einschließlich, bis keine Zeilen übrig sind. Der Befehl bleibt im Wesentlichen in Zeile 3, bis alles gelöscht ist. – potong
@potong nicht wahr. Wenn ich ein '=' davor einfüge, sehe ich, dass die Zeilennummer (3) mehrmals gedruckt wird. Also, es beginnt den ganzen Weg von oben. – euphoria83
Zeile 3 wird jedoch nie gedruckt, da der normale Druckteil der sed-Schleife nie erreicht wird, wenn der Befehl 'D' ausgeführt wird. Versuchen Sie, einen '3p'-Befehl oder einen' 3P' einzufügen. – potong