Назад | Перейти на главную страницу

grep / поиск нескольких строк в файле

Допустим, у меня есть файл с длинным вложенным массивом, который отформатирован следующим образом:

array(
   'key1' => array(
       'val1' => 'val',
       'val2' => 'val',
       'val3' => 'val',
   ),
   'key2' => array(
       'val1' => 'val',
       'val2' => 'val',
       'val3' => 'val',
   ),
   //etc...
);

то, что я хотел бы сделать, это иметь способ grep / search в файле и, зная ключ 1, получить все строки (подмассив), которые он содержит. Это возможно?

Не с grep но вы должны уметь это делать с awk или sed:

sed -n '/key1/,/)/p' file.txt

Если уровней вложенных массивов больше нет, то это должно работать:

awk '/key1/,/\)/' my_input_file

Обычно он печатается с key1 к следующей закрывающей скобке ).

Если это фиксированное количество элементов в массиве, вы можете использовать -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 для строк перед.