2013-05-14 17 views
19

Quando eseguo una subshell per ottenere l'output di un comando, le interruzioni di riga vengono perse.Mantieni interruzioni di riga in uscita da subshell

Ad esempio:

filenames=$(grep 'foobar' /some/dir) 
echo $filenames 

Supponendo c'è più di 1 file in /some/dir che contiene la stringa "foobar", tali nomi viene stampato in una lunga linea separati da spazi invece di 1 nome file per riga.

Non riesco a utilizzare lo tr per riconvertire gli spazi in interruzioni di riga, poiché i nomi dei file potrebbero comunque contenere degli spazi.

C'è un modo per mantenere le interruzioni di riga?

+0

che ne dici di usare awk e ordinare? puoi farlo? – Oz123

risposta

25

Quota variabile per stampare i ritorni a capo:

filenames=$(grep 'foobar' /some/dir) 
echo "$filenames" 
+3

Wow, è incredibilmente semplice ma non del tutto ovvio allo stesso tempo, grazie :) – fukawi2

+3

@ fukawi2 'eppure non del tutto ovvio. Sei gentile. Direi "completamente * un * -obvious" – javadba

0

non più risorse amichevole, a causa di tubi ...

grep 'foobar' /some/dir/| | awk '{print $1}' | sort -u 

Ecco un esempio di output:

$ grep enc pwman/ui/* | awk '{print $1}' 
pwman/ui/cli.py: 
pwman/ui/cli.py: 
pwman/ui/cli.py: 
pwman/ui/cli.py: 
pwman/ui/cli.py: 
pwman/ui/cli.py: 
Binary 
$ grep enc pwman/ui/* | awk '{print $1}' | sort -u 
Binary 
pwman/ui/cli.py: 
$ 
Problemi correlati