Поддерживать разрывы строк в выводе из подоболочки

20

Когда я выполняю подоболочку для получения вывода команды, разрывы строк теряются.

Например:

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

Предполагая, что в /some/dir содержится более 1 файла, который содержит строку «foobar», эти имена файлов будут напечатаны в одной длинной разделительной строке вместо 1 имени файла в строке.

Я не могу просто использовать tr для преобразования пробелов в разрывы строк, так как имена файлов могут иметь пробелы в них.

Есть ли способ поддерживать разрывы строк?

    
задан fukawi2 14.05.2013 в 07:40
источник
  • как насчет использования awk и сортировки? вы можете это сделать? –  Oz123 14.05.2013 в 07:51

2 ответа

25

Введите переменную для печати строк новой строки:

filenames=$(grep 'foobar' /some/dir)
echo "$filenames"
    
ответ дан P.P. 14.05.2013 в 07:47
  • Вау, это просто просто, но не совсем очевидно в одно и то же время, спасибо :) –  fukawi2 15.05.2013 в 01:32
  • @ fukawi2 пока не полностью очевидно. Вы добры. Я бы сказал, "совершенно неочевидно" –  javadba 13.02.2017 в 21:40
0

не самые дружественные ресурсы, из-за труб ...

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

Вот пример вывода:

$ grep enc pwman/ui/* | awk '{print }'
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 }' | sort -u
Binary
pwman/ui/cli.py:
$
    
ответ дан Oz123 14.05.2013 в 07:53