В вашем скрипте три проблемы:
a) sed
при его вызове все входные строки будут напечатаны как минимум один раз, а последние - дважды; это можно исправить, выполнив sed -e "/$pattern/,\$p" -e "d" logfile.log
, добавив аргументы -e d
в конце ваших опций перед именем файла;
b) время, возвращаемое с опцией %R
, содержит :
, которые не представлять свой лог-файл; Вы можете исправить это, используя формат даты +'%Y%M%d %H%M'
;
c) Строка, которую вы ищете, Error
, но вы указываете ERROR
в качестве аргумента для grep
, что не происходит для работы, поскольку grep
аргументы по умолчанию чувствительны к регистру.
Попробуйте:
pattern=$(date +'%Y%M%d %H%M' -d '-5 minutes')
sed -e "/: \*\*$pattern/,\$p" -e "d" logfile.log | grep "Error"
Но проще выдать все, начиная с sed
, без grep
:
pattern=$(date +'%Y%M%d %H%M' -d '-5 minutes')
sed -e "/: \*\*$pattern/,\${/Error/p}" -e "d" logfile.log