Хранить выход 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'
Как я могу достичь результата, не выполняя операцию расточного разделения по целям?
Ответы
Ответ 1
Вы можете использовать:
targets=($(grep -HRl "pattern" .))
Обратите внимание на использование (...)
для создания массива в BASH.
Также вы можете использовать grep -l
для получения только имен файлов в grep
выводах (как показано в моей команде).