Comando
tail -f log.txt | awk '{if($1~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9]+/){if($0~/\[[A-Za-z]+-[A-Za-z]+\]/){MATCH=1}else{MATCH=0}}if(MATCH){print $0}}'
Como funciona
-
awk
processa a saída canalizada linha por linha. -
Se o primeiro campo da linha (delimitado por espaço e indicado por
$1
) corresponder à expressão regular[0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9]+
, o valor deMATCH
será alterado:-
Se o padrão
\[[A-Za-z]+-[A-Za-z]+\]
ocorrer,MATCH
será definido como1
(truthy). -
Se o padrão
\[[A-Za-z]+-[A-Za-z]+\]
não ocorrer,MATCH
será definido como0
(falsy).
-
-
Finalmente, se
MATCH
for verdadeiro,print $0
imprimirá toda a linha (denotada por$0
).Como
MATCH
é verdadeiro se e somente se a última linha que começa com um registro de data e hora contiver o padrão[something-something]
, isso produzirá a saída desejada.