Resposta para a pergunta revisada
Vamos considerar este arquivo de teste;
$ cat File2
000-12-22
AB1
00 PROGRAM
01 INQUIRY
03 XYZ
04 XYZ
LINE VALUE
00456
Experimente este comando:
$ sed '/00 PROGRAM/,/^$/{/./{h;d}; x; p; x;}' File2
000-12-22
AB1
04 XYZ
LINE VA
LUE 00456
Responda para a pergunta original
Se eu entendi corretamente, você tem um arquivo que contém grupos de ônus que começam com uma linha contendo 00 PROGRAM
e terminam com uma linha em branco e você deseja a linha antes da linha em branco se ela contiver XYZ
. Se for esse o caso, tente isto:
sed -n '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/p}' file
Exemplo
Considere este arquivo de amostra:
$ cat file
00 PROGRAM
some
XYZ discard this
data
XYZ keep this
other
00 PROGRAM
more
XYZ keep this also
end
Isso mantém apenas as linhas XYZ
que precedem a linha em branco em um bloco 00 PROGRAM
:
$ sed -n '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/p}' file
XYZ keep this
XYZ keep this also
Alternativa
Talvez você queira manter todas as linhas fora do grupo e também manter a última linha não vazia do grupo, se corresponder a XYZ
. Nesse caso:
$ sed '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/!d}' file
XYZ keep this
other
XYZ keep this also
end