como encontrar (grep) parágrafo iniciar com a palavra e terminar com outra palavra e ignorar nova linha?

3

Eu quero encontrar um parágrafo é uma lista de arquivos. Por exemplo, uma instrução SQL que se parece com:

upadte b_table
set number = 100014
where id in (
            select number_desc from t_table
            where id > 100);

Como devo ignorar entrar / novas linhas?

Eu preciso encontrar / imprimir um parágrafo que comece com "update" e termine com a primeira ocorrência de ;

    
por user84129 02.06.2011 / 11:50

3 respostas

3

Inspirado pela solução concisa do barryj:

perl -ne 'print if /update/../;/' *.sql

Se as instruções de atualização estiverem contidas em parágrafos (delimitados por linhas vazias):

perl -00 -ne 'print if /update.*?;/' *.sql

- de link

Caso contrário, isso imprime nomes de arquivos e instruções de atualização:

perl -ne 'BEGIN{undef $/}; print "$ARGV\t$.\t$1\n" if m/(update.*?;)/mg' *.sql

- de link

(não testado - caveat emptor)

    
por 02.06.2011 / 14:42
3

o grep é um pouco complicado com novas linhas, mas você pode tentar algo com o awk:

awk '/update/,/;/' < filename.sql
    
por 02.06.2011 / 13:25
0

Eu usei o grep assim:

grep -ihRP  '^(update|( )* update) .* [^;]*;'
    
por 07.06.2011 / 07:12