Wie kann ich die Reihenfolge der Zeilen in einer Datei umkehren?
Ich würde gerne die Reihenfolge der Zeilen in einer text-Datei (oder der Standardeingabe (stdin), die Erhaltung der Inhalt jeder Zeile.
So, d.h., beginnend mit:
foo
bar
baz
Ich würde gerne bis zum Ende mit
baz
bar
foo
Ist es ein standard-UNIX-Kommandozeilen-utility für diese?
InformationsquelleAutor der Frage Scotty Allen | 2009-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
BSD-Schwanz:
Referenz: FreeBSDNetBSDOpenBSD und OS X manual pages.
InformationsquelleAutor der Antwort Jason Cohen
Außerdem erwähnenswert:
tac
(der, ähem, Rückseitecat
). Teil coreutils.Spiegeln eine Datei in ein anderes
InformationsquelleAutor der Antwort Mihai Limbășan
Gibt es die bekannte sed-tricks:
(Erklärung: Schreibe nicht-der ersten Linie zu halten, Puffer, Makeln und halten-Puffer, drucken Sie die Linie am Ende)
Alternativ (mit schneller Ausführung) aus dem awk-Einzeiler:
Wenn du dich nicht erinnern kannst, dass
Auf einem system mit den GNU-utilities, die anderen Antworten sind einfacher, aber nicht alle der Welt, ist GNU/Linux...
InformationsquelleAutor der Antwort ephemient
Wenn Sie geschehen, in
vim
verwendenInformationsquelleAutor der Antwort DerMike
Versuchen
tac
die arbeiten auf Linux, und wenn das nicht funktioniert, verwenden Sietail -r
Werke, die auf BSD und OSX.InformationsquelleAutor der Antwort DigitalRoss
Beispiel:
InformationsquelleAutor der Antwort jins
Versuchen Sie den folgenden Befehl ein:
InformationsquelleAutor der Antwort
Nur Bash 🙂 (4.0+)
InformationsquelleAutor der Antwort konsolebox
Die einfachste Methode ist die Nutzung der
tac
Befehl.tac
istcat
's Umgekehrt.Beispiel:
InformationsquelleAutor der Antwort Yekatandilburg
Ich mag die "Schwanz -r" Antwort, aber mein Favorit gawk Antwort ist....
InformationsquelleAutor der Antwort Tim Menzies
Beste Lösung:
InformationsquelleAutor der Antwort ITNM
BEARBEITEN
der folgende Code erzeugt eine zufällig sortierte Liste der zahlen von 1 bis 10:
wo die Punkte ersetzt, die mit den tatsächlichen Befehl die Umkehrung der Liste
tac
python: die Verwendung von [::-1] auf sys.stdin
InformationsquelleAutor der Antwort Yauhen Yakimovich
For cross-OS (also OS x, Linux) - Lösung, die
tac
in einem shell-Skript verwenden, homebrew wie andere erwähnt haben, dann nur alias tac etwa so:InformationsquelleAutor der Antwort lacostenycoder
Dieser läuft auf BSD und GNU.
InformationsquelleAutor der Antwort R. Kumar
Ich hatte die gleiche Frage, aber ich wollte auch die erste Zeile (header), um oben zu bleiben. So ich brauchte, um die Mächtigkeit von awk
PS arbeitet auch im cygwin oder gitbash
InformationsquelleAutor der Antwort KIC
Können Sie es mit
vim
stdin
undstdout
. Sie können auchex
werden POSIX-konform.vim
ist nur der visuelle Modus fürex
. In der Tat, können Sieex
mitvim -e
odervim -E
(verbesserteex
- Modus).vim
ist nützlich, weil im Gegensatz zu tools wiesed
es puffert die Datei für die Bearbeitung, währendsed
ist für streams. Sie können möglicherweise verwenden Sieawk
aber Sie müsste manuell Puffer alles in eine variable.Die Idee ist die folgende:
g/^/m0
. Dies bedeutet Global, für jede Zeileg
; match den Anfang der Zeile, das passt alles^
; verschieben Sie nach Adresse 0, die Zeile 1m0
.%p
. Dies bedeutet für den Bereich, der alle Zeilen%
; print die Zeilep
.q!
. Dies bedeutet beendenq
; Nachdruck!
.Wie das wiederverwendbare
Ich ein Skript verwenden, ich nenne
ved
(vim-editor, wiesed
) vim benutzen, zu Bearbeitenstdin
. Fügen Sie diese in eine Datei namensved
im Pfad:Bin ich mit einer
+
- Befehl anstelle des+'%p' +'q!'
weil vim Grenzen, die Sie zu 10 Befehle. So verschmelzen Sie können die"$@"
haben 9+
Befehle anstelle von 8.Dann können Sie tun:
Wenn Sie nicht über vim 8, setzen Sie diese in
ved
statt:InformationsquelleAutor der Antwort dosentmatter
Schwanz -r funktioniert der trick:
seq 1 20 | tail-r
InformationsquelleAutor der Antwort Bohdan
Mithilfe von Visual Studio™ können Sie in der unteren Zeile mit der Maus. 'schneiden' diese Zeile und dann auf 'einfügen' es auf die Spitze. Weiterhin tun, bis die ursprüngliche Spitze der Linie ist an der Unterseite. Ich glaube, diese Methode funktioniert in anderen Editoren, aber ich habe es nicht ausprobiert.
InformationsquelleAutor der Antwort Dr Blowhard
oder
InformationsquelleAutor der Antwort Yoker Rekoy