Se você tem o GNU awk
, eu sugeriria algo assim:
gawk 'BEGIN{RS="-+\n"} $0=="" || /ord:chandru/ && /KEY:ZZ/ {ORS=RT; print}' sample.txt
-------------
ord:chandru SAM
XY DUPL
KEY:ZZ
-------------
ord:chandru SAM
XY DUPL
KEY:ZZ
-------------
O $0==""
apenas força a impressão de registros vazios (que é como a primeira linha do arquivo será interpretada, se você considerar que os registros serão delimitados por strings de hifens).
Se você não tem gawk
, então a única diferença é que você não pode capturar facilmente o separador de registro - na amostra que você forneceu, isso não é um grande problema, já que é uma string fixa. Por exemplo, com mawk
:
mawk 'BEGIN{RS="-------------\n"; ORS=RS} $0=="" || /ord:chandru/ && /KEY:ZZ/ {print}' sample.txt
-------------
ord:chandru SAM
XY DUPL
KEY:ZZ
-------------
ord:chandru SAM
XY DUPL
KEY:ZZ
-------------