Primeiro de tudo, não há razão para que grep
não possa fazer isso. Ah, e note que você não precisa de cat
, tanto grep
quanto awk
podem receber nomes de arquivos de entrada:
$ grep -xB2 'create table "sacro".issue' file
{ unload file name = issue00106.unl number of rows = 74 }
create table "sacro".issue
Então, se você quiser apenas a primeira linha, faça:
$ grep -xB2 'create table "sacro".issue' file | head -n1
{ unload file name = issue00106.unl number of rows = 74 }
O -x
significa "corresponde à linha inteira", o que garante que a linha create table "sacro".issue_category
não seja impressa. O -B2
significa "imprimir as duas linhas anteriores também.
Você também pode fazer isso em awk
, conforme solicitado:
$ awk -vs='create table "sacro".issue' '($0==s){print b2}{b2=b1; b1=$0}' file
{ unload file name = issue00106.unl number of rows = 74 }