grep / procura por várias linhas em um arquivo

1

Digamos que eu tenha um arquivo com uma matriz aninhada longa, formatada assim:

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

O que eu gostaria de fazer é ter uma maneira de pesquisar / pesquisar um arquivo, e conhecendo a chave 1, pegue todas as linhas (a sub-matriz) que ele contém. isso é possível?

    
por GSto 26.04.2010 / 22:13

3 respostas

2

Não com grep , mas você deve ser capaz de fazer isso com awk ou sed :

sed -n '/key1/,/)/p' file.txt
    
por 26.04.2010 / 22:36
1

Se não houver mais níveis de matrizes aninhadas, isso deve funcionar:

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

Basicamente, ele imprime de key1 para o próximo colchete de fechamento ) .

    
por 26.04.2010 / 22:28
0

Se for um número fixo de itens no array, você pode usar o -A (linhas após switch) com 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.

Também há -B para as linhas anteriores.

    
por 27.04.2010 / 14:45