Wenn wir den Befehl sort file
verwenden, zeigt Die Datei ihren Inhalt sortiert an.
Sie können die Dateiumleitung verwenden, um die sortierte Ausgabe umzuleiten:
sort input-file > output_file
Oder Sie können die Sortieroption -o
, --output=FILE
verwenden, um dieselbe Eingabe- und Ausgabedatei anzugeben:
sort -o file file
Hinweis: Ein häufiger Fehler ist der Versuch, die Ausgabe in dieselbe Eingabedatei umzuleiten (Z. B. sort file > file
). Dies funktioniert nicht, da die Shell die Umleitungen vornimmt (nicht das Programm sort (1)) und die Eingabedatei (auch die Ausgabe) wird gelöscht, bevor sort (1) Programmieren Sie die Gelegenheit, es zu lesen.
Der Befehl sort
druckt das Ergebnis der Sortierung standardmäßig in der Standardausgabe. Um eine "In-Place" -Sortierung zu erreichen, können Sie Folgendes tun:
sort -o file file
Dadurch wird die Eingabe file
mit der sortierten Ausgabe überschrieben. Der -o
-Schalter, der zum Angeben einer Ausgabe verwendet wird, wird von POSIX definiert, sollte also in allen Versionen von sort
verfügbar sein:
-o Geben Sie den Namen einer Ausgabedatei an, die anstelle der Standardausgabe verwendet werden soll. Diese Datei kann mit einer der Eingabedateien identisch sein.
Wenn Sie unglücklich genug sind, um eine Version von sort
ohne den -o
-Schalter zu haben ( Luis versichert mir, dass sie existieren), können Sie auf die Standard-Weise eine "In-Place-Bearbeitung" durchführen:
sort file > tmp && mv tmp file
Versuchen Sie zum Sortieren der Datei an Ort und Stelle:
echo "$(sort your_file)" > your_file
Wie in anderen Antworten erläutert, können Sie die Ausgabe nicht direkt zurück in die Eingabedatei umleiten. Sie können den Befehl sort
jedoch zuerst auswerten und anschließend wieder zur ursprünglichen Datei umleiten. Auf diese Weise können Sie eine In-Place-Sortierung implementieren.
Auf ähnliche Weise können Sie diesen Trick auch auf andere Befehle wie paste
anwenden, um zeilenweise das Anhängen zu implementieren.
sort file | sponge file
Dies ist im folgenden Fedora-Paket enthalten:
moreutils : Additional unix utilities
Repo : Fedora
Matched from:
Filename : /usr/bin/sponge
Hier ist ein Ansatz, der (ab) vim
verwendet:
vim -c :sort -c :wq -E -s "${filename}"
Der -c :sort -c :wq
-Abschnitt ruft Befehle auf, die nach dem Öffnen der Datei angezeigt werden sollen. -E
und -s
sind erforderlich, damit vim in einem "headless" -Modus ausgeführt wird, der nicht zum Terminal zeichnet.
Dies hat fast keine Vorteile gegenüber dem sort -o "${filename}" "${filename}"
-Ansatz, nur dass das Argument Dateiname nur einmal verwendet wird.
Dies war hilfreich, um eine formatter
-Direktive in einem nanorc
-Eintrag für .gitignore
-Dateien zu implementieren. Folgendes habe ich dafür verwendet:
syntax "gitignore" "\.gitignore$"
formatter vim -c :sort -c :wq -E -s
Möchten Sie alle Dateien in einem Ordner und Unterordner sortieren und überschreiben?
Benutze das:
find . -type f -exec sort {} -o {} \;