grep/ поиск нескольких строк в файле
Допустим, у меня есть файл с длинным вложенным массивом, который отформатирован так:
array(
'key1' => array(
'val1' => 'val',
'val2' => 'val',
'val3' => 'val',
),
'key2' => array(
'val1' => 'val',
'val2' => 'val',
'val3' => 'val',
),
//etc...
);
то, что я хотел бы сделать, это иметь способ выполнить поиск / поиск файла и, зная ключ 1, получить все строки (подмассив), который он содержит. Это возможно?
3 ответа
Решение
Не с grep
но вы должны быть в состоянии сделать это с awk
или же sed
:
sed -n '/key1/,/)/p' file.txt
Если уровней вложенных массивов больше нет, это должно сработать:
awk '/key1/,/\)/' my_input_file
По сути, он печатает от ключа 1 до следующей закрывающей скобки ).
Если это фиксированное количество элементов в массиве, вы можете использовать -A
(строки после переключателя) с помощью grep:
grep -A4 'key1' myfile
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines.
Places a line containing a group separator (--) between
contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.
Существует также -B
для перед строк, а также.