Это чрезвычайно распространенный шаблон для Awk. Соберите связанные строки в «записи», распечатайте запись, когда вы все собрали, если она соответствует определенному условию.
tail -f file |
awk '/\[l]/ { if (p && stored) print stored; stored = ""; p=0 }
/\[logTypeA]/ { p=1 }
{ stored = stored (stored ? ORS : "") $0 }
END { if (p) print stored }'
Условие END
на самом деле не имеет смысла с бесконечным потоком из tail -f
, но я включаю его на всякий случай и во избежание надоедливых сбоев теста, когда последняя запись, которую вы хотите протестировать, должна быть напечатана, но не без предложения END
.