Wie kann die Ausgabe von ls -l
geändert werden, um Felder mithilfe von Tabulatoren anstelle von Leerzeichen zu trennen? Ich möchte die Ausgabe in eine Tabelle einfügen. Die Polsterung mit einer variablen Anzahl von Leerzeichen macht dies schwierig. Um zu veranschaulichen:
drwxr-xr-x 2 root root 4096 26. September 11:43 wpa_supplicant -rw-r ----- 1 Root-Dialout 66 26. September 11:43 wvdial.conf drwxr-xr-x 9 root root 4096 8. Oktober 08:21 X11 drwxr-xr-x 12 root root 4096 18. Februar 23:31 xdg drwxr-xr-x 2 root root 4096 31. Januar 06:11 xml drwxr-xr-x 2 root root 4096 22. November 07:26 xul-ext -rw-r - r-- 1 root root 349 13. Januar 2012 zsh_command_not_found
In dem ls -l /etc
oben gezeigten Auszug haben die Zeilen 1, 2 und 3 eine einzelne Ziffer in Spalte 2, während Zeile 4 zwei hat. Das heißt, die Ausrichtung wird erreicht, indem zwei Leerzeichen zum Trennen der Spalten 1 und 2 in den Zeilen 1 bis 3 verwendet werden, jedoch nur ein Leerzeichen in Zeile 4.
ls
gesagt wird , ist das Parsen der Ausgabe in Ordnung. Das ist selten das Ziel. Wohl ist es hier. Ich denke , die Methode , die Sie verwendet haben , ist ziemlich gut (jedes Verfahren wird gegeben unerwünschten Ergebnissen führen einige Reihe von Bedürfnissen)! Das Parsenls
könnte jedoch besser sein. Stellen Sie sich den Fall eines Dateinamens vor, der tatsächlich ein Tabulatorzeichen enthält.ls -l
Ersetzt die Registerkarte durch ein?
Zeichen. Ihr Skript behält das Tabulatorzeichen bei, wodurch zusätzliche Spalten erstellt werden, wenn die Ausgabe als tabulatorgetrennt interpretiert und zum Erstellen einer Tabelle verwendet wird. Es verschlechtert sich stark, wenn ein Dateiname eine neue Zeile hat.\n
oder\t
in ihren Namen. Wenn dies derls
Fall ist , ist das Parsen der Ausgabe mit einfachen Bash-Befehlen komplexer, kann jedoch erreicht werden. Ich kann die Antwort aktualisieren, wenn das OP solche Fälle behandeln möchte.\n
und\t
in deren Namen befassen kann .printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $file
und leiten Sie die Datei als um./ls_tab.sh > listing.txt
.Versuchen:
Oder wenn Ihre Dateinamen Leerzeichen haben:
quelle
awk
gedacht. Klug!$9
ändert nichts an der Tatsache, dass Sieawk
Leerzeichen immer so interpretieren , dass sie einen Bruch zwischen Spalten anzeigen.$9
erfasst nur das erste Wort an dieser Position, und da die anderen Wörter als separate Spalten mit höherer Nummer betrachtet werden, werden sie überhaupt nicht gedruckt.Wir müssen die Ausgabe nicht einmal als tabulatorgetrennt konvertieren. Der Abstand zwischen den Spalten ist gerade gut genug.
Führen Sie Ihren
ls -l
Befehl wie gewohnt im Terminal aus und kopieren Sie den Inhalt, den Sie in eine Tabelle einfügen möchten.Öffnen Sie als Nächstes Ihr Tabellenkalkulationsprogramm (in meinem Fall LibreOffice Calc) und drücken Sie Ctrl+, Vum den Inhalt Ihrer Zwischenablage einzufügen.
Der Textimport-Assistent wird angezeigt. Stellen Sie sicher, dass Sie ein Häkchen neben setzen
Space
und drücken Ok. Sie können die Vorschau im unteren Bereich anzeigen.quelle
Python ist gut dafür:
quelle