Wie die 'N' - Befehl funktioniert in der sed?
ohne Präambel,
$ cat in.txt ein b c d $ sed '=;N' in.txt 1 ein b 3 c d
Es sieht aus wie 'N" - Befehl funktioniert auf jeder anderen Linie. Vielleicht wäre das natürlich, weil der Befehl 'N' joins nächste Zeile und ändert die aktuelle Zeilennummer. Aber,
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
(Ich sah diese hier)
obige Beispiel löscht die zwei letzten Zeilen einer Datei. Dies funktioniert nicht nur auch-line-nummeriert Datei aber auch odd-line-nummeriert Datei. So in diesem Beispiel, 'N' - Befehl läuft auf allen Linien.
Was ist der Unterschied?
Und könnten Sie mir sagen, warum ich nicht sehen kann, die Letzte Zeile, wenn ich mit sed so?
# sed-N odd-lined-file.txt
InformationsquelleAutor plhn | 2011-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auszug aus
info sed
:Dieser sollte ziemlich viel lösen Ihre Abfrage. Aber ich werde versuchen zu erklären, Ihre drei Fälle zu unterscheiden:
FALL 1:
sed
liest eine Zeile von der Eingabe. [Nun gibt es die 1 Zeile im pattern space.]=
Druckt die aktuelle Zeile nicht.N
liest die nächste Zeile in den pattern space.[Jetzt gibt es 2 Linien im pattern-space.]sed
druckt das Muster Raum und reinigt es. [Muster Raum leer ist.]EOF
erreichtsed
beendet hier. Sonst Neustart des kompletten Zyklus ab Schritt 1. [ie: Im Fall von geraden Linien, sed beendet hier.]Inhaltsangabe: In diesem Fall sed liest 2 Zeilen und druckt 2 Zeilen zu einer Zeit. Letzte Zeile verschluckt, es gibt ungerade Linien (siehe Schritt 3).
FALL 2:
sed
liest eine Zeile von der Eingabe. [Nun gibt es die 1 Zeile im pattern space.]N
liest die nächste Zeile in den pattern space. [Jetzt gibt es 2 Linien im pattern-space.]$!
) ausdrucken der ersten Zeile(P
) aus dem pattern space. [Die erste Zeile aus dem pattern space wird gedruckt. Aber noch gibt es 2 Linien im pattern-space.]$!
) löschen Sie die erste Zeile(D
) aus dem pattern space [Jetzt gibt es nur 1 Zeile (der zweite) im pattern-space.] und starten Sie den Befehl Zyklus ab Schritt 2. Und weil der BefehlD
(siehe Auszug oben).$
), dann löschen(d
) das vollständige Muster Raum. [ie. erreicht EOF ] [Bevor Sie mit diesem Schritt, es waren 2 Linien in den Muster-Raum, die sind jetzt bereinigt, indemd
- am Ende dieses Schrittes, die Muster der Raum ist leer.]sed
Stoppt automatisch am Dateiende.Inhaltsangabe: In diesem Fall :
sed
liest 2 Zeilen zuerst.FALL 3:
Es ist die gleiche Fall wie FALL:1, entfernen Sie einfach den Schritt 2 aus.
Angesichts Ihres Kommentars, habe ich aktualisiert die Antwort. Bitte überprüfen Sie es einmal.
Ich danke Ihnen sehr!!!!!!!!
Was ist der Unterschied zwischen
n
undN
imsed
?InformationsquelleAutor ssapkota