Sagen wir, wenn ich ls befehle, ist die Ausgabe:
file1 file2 file3 file4
Ist es möglich, nur eine bestimmte Ausgabespalte anzuzeigen, in diesem Fall file2? Ich habe folgendes ohne Erfolg versucht:
echo ls | $2
Grundsätzlich möchte ich nur die zweite Spalte ausgeben, in diesem Fall möchte ich Folgendes ausgeben:
file2
ls
Ausgabe?ls
und Nach dem Erstellen einiger Dateien / Ordner ist es möglicherweise nicht mehr das, was Sie möchten. Wie Terdon darauf hingewiesen hat, gibt es sicher bessere Möglichkeiten, um zu bekommen, was Sie wollenAntworten:
Der folgende Befehl formatiert die Ausgabe in eine Spalte
quelle
ls -1 /directory | head -2 | tail -1
oderls -1 /directory | perl -ne 'print if $. == 2'
ls | sed -n '1p;q'
scheint einfacherDu suchst das:
Gehen Sie jedoch davon aus, dass Sie versuchen, diesen Dateinamen später zu verwenden, da er bei Dateinamen mit Leerzeichen abbricht. Fügen Sie stattdessen die Dateien in ein Array ein und holen Sie sich das zweite, wodurch das Parsen überhaupt vermieden wird:
Die Reihenfolge, in der Sie die Dateien zurückerhalten, hängt vom Wert von ab
LC_COLLATE
. Daher möchten Sie möglicherweiseLC_COLLATE=C
zuerst festlegen , ob in allen Eckfällen eine "Standardsortierung" erfolgen soll.quelle
1
in sinnvollen Shells (zsh, yash, fish, csh, tcsh, rc, es ...) und0
in ksh und bash beginnen. Für eine Lösung, die für alle Bourne-ähnlichen Shells portierbar ist, können Sieset -- *; printf '%s\n' "$2"
stattdessen Folgendes verwenden:Sie müssten hinzufügen
-C
alsls
Einsäulen-Modus verwendet , wenn der Ausgang kein Terminal ist.awk
druckt dann die zweite Spalte:quelle
Ich glaube du suchst
Es werden keine Berechtigung, Eigentümer, Gruppe, Datum, Größe ..., sondern ein einfacher Dateiname in einer Spalte angezeigt.
quelle
Der einzige Weg für mich ist das Hinzufügen von "-all". Das ist:
Weil
-all
mehr Spalten wie Benutzer, Berechtigungen usw. hinzugefügt werden.quelle
Wie bereits erwähnt, ist die Verwendung von Spalten zum Parsen der
ls
Ausgabe nicht sehr robust, dals
die Zeilen entsprechend der Länge Ihres Dateinamens und der Terminalbreite getrennt werden. Oft ist es jedoch interessant, eine einzelne Spalte einer Liste von Elementen anzuzeigen. Sie können dies mit dem Befehl cut tun:wird angezeigt
Beachten Sie,
-d
dass Sie den Spaltentrenner auswählen können, zum Beispiel mitSie können die zweite Spalte einer durch Kommas getrennten Liste anzeigen.
quelle
Angenommen, Sie möchten nur den bestimmten Dateinamen unter dem aktuellen Pfad anzeigen, verwenden Sie den folgenden Befehl
Befehl:
quelle
Dies ist schwierig, da das Parsen
ls -C
von Folgendem abhängt:ls -C
)ls -C
Ausgabe ist säulenförmig, kann jedoch als Feldtrennzeichen auf eine unterschiedliche Anzahl von Leerzeichen konfiguriert werden.ls
gewählten Anzeigeoptionen abhängt ).Beginnen wir zunächst mit dem einfacheren Problem ( dh nicht # 4 oben), vorausgesetzt , die Dateinamen enthalten kein Leerzeichen . So drucken Sie Spalte 2:
Das abrollen:
COLUMNS=$COLUMNS
garantiert, dass die zugeführte Spaltenlänge|
mit der aktuellen Terminalanzeige übereinstimmt. Das Ändern in einen willkürlichen Wert funktioniert auch, sodassCOLUMNS=50
oder veranlasstCOLUMNS=70
würdels -C
, die Dinge entsprechend diesen Breiten neu zu ordnen.Eine andere Methode wäre die Verwendung des
-w
Schalters, z .tr
macht die Feldtrennzeichen konsistent: eine einzelne Registerkarte zwischen jeder Spalte.cut
gibt die gewünschte Spalte aus.quelle
Ändern Sie die Anzahl der Zeichen (54) nach Bedarf, sodass Sie nur die gewünschten Daten erhalten.
quelle
54-
Tells, die von Position 54 an auf jedes Zeichen zugeschnitten sind. es hört nicht bei "vom Menschen erkannten" Kolumnen auf