GNU/Linux >> Linux Esercitazione >  >> Linux

Iterazione su ogni riga dell'output di ls -l

Imposta IFS su newline, in questo modo:

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

Metti una sotto-shell se non vuoi impostare IFS in modo permanente:

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

Oppure usa while | leggi invece:

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

Un'altra opzione, che esegue while/read allo stesso livello di shell:

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

Come già accennato, awk è lo strumento giusto per questo. Se non vuoi usare awk, invece di analizzare l'output di "ls -l" riga per riga, puoi iterare su tutti i file e fare un "ls -l" per ogni singolo file in questo modo:

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

Dipende da cosa vuoi fare con ogni riga. awk è un'utilità utile per questo tipo di elaborazione. Esempio:

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

.. sul mio sistema stampa il nome e la dimensione di ogni elemento nella directory.


Linux
  1. Come inserire del testo all'inizio di ogni riga in Vim

  2. Come scorrere le righe di un file?

  3. Contando i caratteri di ogni riga con Wc?

  4. Elaborare ogni riga di output da `ping` immediatamente in pipeline?

  5. Script Bash:come assegnare ogni riga di output di comando ai valori in un array?

Lolcat:uno strumento da riga di comando per generare Rainbow Of Colors nel terminale Linux

Prefisso a ogni output di un comando in fase di esecuzione

Riga di comando:estrai la sottostringa dall'output

Pipe/Mix Line In all'uscita in PulseAudio

Un comando per emettere ogni riga in avanti e poi all'indietro

Significato della riga buffer/cache nell'output di free