Поиск журналов в UNIX между датами "До" и "ОТ" в сценарии

У меня есть скрипт, который ищет каталог журналов с помощью команды grep, ниже приведена команда.

export CMD="grep -ie '.*${RUN_DATE}.*${MESSAGE_TO_SEARCH}' ${LOG_FILE_PATH}/${LOG_FILE} | awk -F 'addInfo' '{print \$2;}' | sed '/^$/d'"

Теперь RUN_DATE - это любая дата запуска скрипта.

MESSAGE_TO_SEARCH - это любое сообщение, которое мы ищем в файле журнала.

Он объявляется перед запуском скрипта.

Я хочу изменить скрипт, который он ищет между TO и FROM, например:

FROM_TIME = 2016-08-28 13:30:00 и

TO_TIME=2016-08-29 17:00:00

Так что скрипт должен выдавать логи, которые лежат только за это время.

Я попробовал следующее, используя проходные даты в качестве регулярного выражения, но это не сработало.

export CMD="grep -ie '.*[${FROM_DATE}-${TO_DATE}].*${MESSAGE_TO_SEARCH}' ${LOG_FILE_PATH}/${LOG_FILE} | awk -F 'addInfo' '{print \$2;}' | sed '/^$/d'"

Пожалуйста, предложите правильный метод. Спасибо

EDIT1: Пожалуйста, скажите мне, как я могу это сделать, если регулярное выражение не подходит для этого.

1 ответ

Если вы просто хотите выбрать строки из файла журнала, есть другой способ с некоторыми простыми командами, но более читаемый.

1. Получите номера строк первой и последней строки.

# SN for start line number, EN for end line number.

export SN=`cat -n LOG_FILE | grep START_TIME | head -1 | awk '{print $1}'`
export EN=`cat -n LOG_FILE | grep END_TIME | tail -1 | awk '{print $1}'`

2. Получите строки, которые вы хотите.

head -$EN LOG_FILE | tail -$(($EN-$SN+1))

Как только мы узнаем номер нужной нам линии, мы можем использовать голову и хвост, чтобы отрезать часть, которая нам не нужна. ^_^

Другие вопросы по тегам