Как найти в файле строки по шаблону и занести их в массив?

Как записать в массив строки, найденные в файле по шаблону с помощью grep? Должен быть скрипт на bash. Чтобы можно было обращаться к конкретной строке по индексу.


Ответы (2 шт):

Автор решения: PotroNik
#Если нужно что бы массив начинался с 1 и соответствовал номеру выбранной строки, расскоментировать строки ниже
#unset mass
#mass[0]="empty"

#Меняем символ разделителя
IFS=$'\n'
#Выбираем данные в массив, символ + стоит указать при начале нумерации с 1, а не 0.
mass+=( `grep Pattern /file` )
#Возвращаем разделитель по умолчанию
unset IFS

#Возвращаем первую строку
echo ${mass[0]}, где 0 - индекс массива


→ Ссылка
Автор решения: Fat-Zer

Можно наполнять массив:

arr=()
while read s; do
    arr+=( "$s" )
done < <(grep pattern /path/to/file)

Основной трюк здесь — перенаправление ввода через подстановку процесса, вместо типовой трубы (grep pattern /path/to/file | while read ...) т.к. в таком случае bash создал бы подоболочку (subshell) для while и все изменения бы пропали, подробности по этому трюку смотри в BashFaq/024.

→ Ссылка