web-dev-qa-db-ja.com

grep出力を配列に保存する

ディレクトリでパターンを検索し、それを含むファイルの名前を配列に保存する必要があります。

パターンの検索:

grep -HR "pattern" . | cut -d: -f1

これにより、「パターン」を含むすべてのファイル名が表示されます。

私が試した場合:

targets=$(grep  -HR "pattern" . | cut -d: -f1)
length=${#targets[@]}
for ((i = 0; i != length; i++)); do
   echo "target $i: '${targets[i]}'"
done

これは、すべてのfilnameを持つ文字列を含む1つの要素のみを出力します。

output: target 0: 'file0 file1 .. fileN'

しかし、私は必要です:

 output: target 0: 'file0'
 output: target 1: 'file1'
 .....
 output: target N: 'fileN'

ターゲットで退屈な分割操作を行わずに結果を達成するにはどうすればよいですか?

40
Luca Davanzo

次を使用できます。

targets=($(grep -HRl "pattern" .))

BASHでの配列作成に(...)を使用していることに注意してください。

また、grep -lを使用して、grepの出力でファイル名のみを取得することもできます(私のコマンドを参照)。

53
anubhava