2013-05-14 10 views
19

Po wykonaniu podpowłoki w celu uzyskania wyniku polecenia łamanie linii zostaje utracone.Zachowaj podział linii na wyjściu z podpowłoką.

Na przykład

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

zakładając, że istnieje więcej niż jeden plik w /some/dir zawierającego łańcuch „foobar” tych nazwach zostaną wydrukowane w jednym długim przestrzennie oddzielone linią zamiast 1 pliku na linię.

Nie mogę po prostu użyć tr, aby przekonwertować spacje z powrotem na podziały wierszy, ponieważ nazwy plików i tak mogą zawierać spacje.

Czy istnieje sposób na zachowanie linii podziału?

+0

A może używać awk i sortować? możesz to zrobić? – Oz123

Odpowiedz

25

Quote zmienną wydrukować nowe linie:

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

Wow, to niesamowicie proste, ale nie do końca oczywiste w tym samym czasie, dzięki :) – fukawi2

+3

@ fukawi2 'jeszcze niezupełnie oczywiste' Jesteś miły. Powiedziałbym "całkowicie * un * -obvious" – javadba

0

nie jest najbardziej przyjazny dla zasobów, ponieważ rur ...

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

Oto przykładowe wyjście:

$ 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: 
$ 
Powiązane problemy