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 для перед строк, а также.

Другие вопросы по тегам