Я хочу отслеживать 2 разных файла журнала (в то время, когда события появляются в журналах).
tail -f /var/log/file1 -f /var/log/file2
Для каждого файла я хочу использовать несколько шаблонов grep:
tail -f /var/log/file1 | grep '\(pattern1\|pattern2\)'
tail -f /var/log/file2 | grep '\(pattern3\|pattern4\|pattern5\)'
Я не знаю, как Чтобы все это работало вместе. Кроме того, я хотел бы распечатать вывод журнала file1 красным цветом, а вывод журнала file2 синим:
Опять же, я могу сделать это для одного файла (фрагмент, который я взял на этом форуме):
RED='\033[0;31m'
BLUE='\033[0;34m'
tail -fn0 /var/log/file1 | while read line;
do
if echo $line | grep -q '\(pattern1\|pattern2\)';then
echo -e "{$RED}$line"
fi
done
Но Я совершенно не знаю, как это сделать для нескольких файлов. Есть идеи?
Вот решение (спасибо, мистер Китт и утки).
Как с помощью Tail -f вывести цвета, используя только Awk, и показать остальную часть вывода?
Если вы хотите анализировать несколько журналов одновременно, вы можете использовать следующий синтаксис:
tail -f /var/log/{log1,log2}
Это приведет к желаемому выводу всех необходимых журналов, поэтому вы можете использовать аргумент -e
в grep
для создания нескольких шаблонов. Так что все вместе:
tail -f /var/log/{log1,log2} | grep -ie "pattern1" -ie "pattern2" -ie "pattern3"
Что касается окрашивания grep, взгляните на этот отличный ответ.
tail -n 0 -f file1 file2 |
awk -v file1pattern="pattern1|pattern2" -v file2pattern="pattern3|pattern4" \
'/^==> file1 <==$/ { print "\033[0;31m"; pattern=file1pattern };
/^==> file2 <==$/ { print "\033[0;34m"; pattern=file2pattern }; $0 ~ pattern'