Supondo que o SQL use ;
como delimitadores de instrução:
$ cat statements.sql
First bit;
Second thing;
More
of the same;
select * from dept where department_name in ('abc'
, 'xyz', 'def') ;
Getting to the end;
The
End;
Em seguida, você pode usar ;
como o separador de registro em awk
e combinar como de costume:
$ awk 'BEGIN { RS=";" } /department_name in ([^)]+)/ { print $0 ";" }' statements.sql
select * from dept where department_name in ('abc'
, 'xyz', 'def') ;
O padrão, /department_name in ([^)]+)/
corresponde à string department_name in (
seguido por um ou vários caracteres que não são )
(incluindo novas linhas), seguidos por um único )
.
A instrução print
adiciona ;
ao final do registro, já que ;
foi removido por awk
(remove todos os separadores de registro).
Você obterá algumas linhas em branco extras, já que havia linhas em branco após o ;
precedente no arquivo. Você pode filtrá-los com sed -n '/[[:graph:]]/p'
:
$ awk 'BEGIN {RS=";"} /department_name in ([^)]+)/ { print $0 ";" }' statements.sql |
sed -n '/[[:graph:]]/p'
select * from dept where department_name in ('abc'
, 'xyz', 'def') ;