Estou tentando criar um comando sed
para escolher uma única entrada de log dos nossos registros do servidor de aplicativos.
Os registros estão neste formato:
LOG|2016-07-26_15:37:45:536|entry1|!
LOG|2016-07-26_15:37:45:536|entry2|extra data
on new line|!
LOG|2016-07-26_15:37:45:536|entry3|!
LOG|2016-07-26_15:37:45:536|entry4|!
LOG|2016-07-26_15:37:45:536|entry5|!
Como você pode ver, algumas entradas serão apenas uma linha e algumas terão várias linhas contendo dados extras. Uma entrada sempre começa com o tipo de log (simplificado para apenas "LOG" acima) e sempre termina com |!
Agora, isso é o que eu tenho até agora:
sed -n -e '/'$id'/,/|!/ p'
Isso funciona bem para as entradas de log de várias linhas:
$ cat log | sed -n -e '/entry2/,/|!/ p'
LOG|2016-07-26_15:37:45:536|entry2|extra data
on new line|!
Mas não tão bem para as entradas de linha única, pois também exibe a próxima entrada:
$ cat log | sed -n -e '/entry3/,/|!/ p'
LOG|2016-07-26_15:37:45:536|entry3|!
LOG|2016-07-26_15:37:45:536|entry4|!
Alguma idéia de como eu posso modificar meu sed
acima para cobrir entradas de registro de linha única ou múltipla?