Другой подход может заключаться в том, чтобы вывести строки, соответствующие каждому шаблону, поверх предыдущего в отдельной строке, например:
#! /bin/sh
tput rmam # no line wrap for terminals that can do it
awk -v u="$(tput cuu1)" -v el="$(tput el)" '
BEGIN {
for (n = 0; n < ARGC; n++) pat[n] = ARGV[n]
ARGC=0
}
{
pre = ""; post = el "\r" u
for (i = 1; i < n; i++) {
if ($0 ~ pat[i]) print pre $0 post
pre = pre "\n"
post = post u
}
}
END{printf "%s", pre}' "$@"
tput smam
Вызывается как:
tail -f example.log | that-script pattern1 pattern2...
Пример :