2013-05-14 10 views
19

サブシェルを実行してコマンドの出力を取得すると、改行は失われます。例えばサブシェルからの出力で改行を維持する

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

が文字列「foobarに」を含む/some/dirにおける1つの以上のファイルが存在すると仮定すると、それらのファイル名ではなく、行ごとに1つのファイル名のいずれか長いスペースで区切られた行に印刷されます。

ファイル名に空白が含まれている可能性があるので、スペースを改行に戻すだけではtrを使用できません。

改行を維持する方法はありますか?

+0

awkとソートの使い方はどうですか?それはできますか? – Oz123

答えて

25

は改行を印刷するための変数を引用:

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

うわー、それはすごくシンプルですが、同時に完全にはっきりしていない、ありがとう) – fukawi2

+3

@ fukawi2 'まだ完全にはっきりしない'あなたは優しいです。私は "完全に* un * - 明らかな" – javadba

0

ないほとんどのリソースに優しい、ためにパイプで...ここで

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

は出力例です:

$ 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: 
$ 
関連する問題