Сначала я хотел бы уточнить контекст моего вопроса.Я должен проявить себя на собеседовании, и собеседование имитирует реальный мир, и я могу проконсультироваться с кем угодно, сделать что угодно, ожидаю, что я должен найти правильный ответ.Я решил много вещей, но с этим я застрял из-за того, что я не очень хорошо разбираюсь ни в регулярных выражениях, ни в командной строке Linux.Я должен решить эту задачу:
Представьте, что вы просматриваете файл журнала с tail -f
.Передайте это в вызов grep, который фильтрует ввод хвоста и показывает только строки, соответствующие сегодняшней дате, в формате «ГГГГ-ММ-ДД» в начале строки (для любого будущего «сегодня») и содержит строку «[error.critical]в любой капитализации.Будьте осторожны с деталями;соответствие должно быть точно таким, как описано здесь.
Для этой цели я создал файл с именем log с этим содержимым для целей тестирования:
2018-10-03 [erroR.critical] sadkhasdhaksd
2018-10-03 sadkhasdhaksd [error.critical]
2018-10-03 sadkhasdhaksd [error.noncritical]
2018-10-26 sadkhasdhaksd [error.critical]
2018-10-03 красный сигнал [Error.critical]
2018-10-03 красный сигнал error.critical красный сигнал
2018-10-03 [error.critical]
Я придумала это решение:
tail -f log | grep -io "^$(date +"%Y-%m-%d")".*\\[error.critical\\]
Однако они сказали, что могут представить два вида строк, которые будутнеправильно соответствовать этому регулярному выражению.Я понял следующие проблемы:
- Я не установил пробел после даты
- Я не правильно выписал результат, так как после
[error.critical]
должен быть выведен дополнительный текст - Возможно, я тоже ошибся с цитатой, не помещая ее в конец строки
Опять же, я не очень хорошо разбираюсь в регулярных выражениях или командной строке Linux.Текущий подход -
tail -f log | grep -io "^$(date +"%Y-%m-%d") .*\\[error.critical\\].*"
, где все проблемы, о которых я узнал после тщательного рассмотрения, были исправлены.Тем не менее, они сказали, что первое регулярное выражение, которое я придумал, может соответствовать двум типам строк, которые не должны быть в результате.Я реализовал один из этих типов (без пробела), но я не знаю, какой другой тип строки ошибочно соответствует моему регулярному выражению.Можете ли вы сказать мне, какая строка будет неправильно соответствовать первому регулярному выражению, кроме тех, которые пропускают пробел после даты?