GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Iteration über jede Zeile der Ausgabe von ls -l

Setzen Sie IFS auf Newline, wie folgt:

IFS='
'
for x in `ls -l $1`; do echo $x; done

Setzen Sie eine Sub-Shell darum, wenn Sie IFS nicht dauerhaft einstellen möchten:

(IFS='
'
for x in `ls -l $1`; do echo $x; done)

Oder verwenden Sie while | lesen Sie stattdessen:

ls -l $1 | while read x; do echo $x; done

Eine weitere Option, die while/read auf derselben Shell-Ebene ausführt:

while read x; do echo $x; done << EOF
$(ls -l $1)
EOF

Wie bereits erwähnt, ist awk dafür das richtige Werkzeug. Wenn Sie awk nicht verwenden möchten, können Sie, anstatt die Ausgabe von "ls -l" Zeile für Zeile zu parsen, über alle Dateien iterieren und ein "ls -l" für jede einzelne Datei wie folgt ausführen:

for x in * ; do echo `ls -ld $x` ; done

Es hängt davon ab, was Sie mit jeder Zeile tun möchten. awk ist ein nützliches Dienstprogramm für diese Art der Verarbeitung. Beispiel:

 ls -l | awk '{print $9, $5}'

.. auf meinem System gibt den Namen und die Größe jedes Eintrags im Verzeichnis aus.


Linux
  1. Die Zeichen jeder Zeile mit Wc zählen?

  2. Verarbeiten Sie jede Ausgabezeile von „ping“ sofort in der Pipeline?

  3. Bash-Skript:Wie weist man jede Zeile der Befehlsausgabe Werten in einem Array zu?

  4. Wie füge ich in Bash nach jeder Zeile in einer Datei eine Zeichenfolge hinzu?

  5. Wie zähle ich die Anzahl der Tabulatoren in jeder Zeile mit Shell-Skript?

Lolcat – Ein Befehlszeilentool zur Ausgabe von Rainbow Of Colors im Linux-Terminal

Welche Bedeutung haben die einzelnen Zeilen der Assembly-Ausgabe eines C hello world?

Ruft die erste Zeile der Ausgabe eines Shell-Befehls ab

Pipe/Mix Line In zum Ausgang in PulseAudio

Ein Befehl, um jede Zeile vorwärts und dann rückwärts auszugeben

Bedeutung der Buffer/Cache-Zeile in der Ausgabe von free