Não tenho certeza se entendi corretamente, pois a descrição do problema não corresponde à saída desejada, mas se as entradas diferentes do arquivo forem separadas por novas linhas consecutivas, você poderá usar o modo Perl e o modo parágrafo:
$ perl -000ne 'print if /keyword/' file
Data engine-1
Data engine-1
Data
Data
Data engine-1 **keyword-1**
Data engine-1
Data engine-3
Data engine-3
Data
Data
Data engine-3 **keyword-1**
Data engine-3
A magia é o -000, isso ativa o modo de parágrafo do Perl, o que faz com que ele divida os arquivos em parágrafos. Em outras palavras, os registros são separados por dois ou mais caracteres \ n consecutivos. Em seguida, informamos para imprimir se o registro atual contiver a palavra-chave.
Você também pode fazer isso em gawk
:
$ gawk 'BEGIN{RS=ORS="\n\n"}/keyword/' file
RS
é o separador de registro de entrada que definimos como 2 novas linhas consecutivas para analisar corretamente o arquivo. ORS
é o separador de registro de saída que também precisa ser configurado para imprimir uma nova linha entre cada registro impresso.