Подтвердить что ты не робот

Хранить выход grep в массиве bash

Мне нужно найти шаблон в каталоге и сохранить имена файлов, которые содержат его в массиве.

Поиск шаблона:

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

Это выводит только один элемент, содержащий строку со всеми именами файлов.

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

Но мне нужно:

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

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

4b9b3361

Ответ 1

Вы можете использовать:

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

Обратите внимание на использование (...) для создания массива в BASH.

Также вы можете использовать grep -l для получения только имен файлов в grep выводах (как показано в моей команде).