-1

Я использую эту запись в моих файлах журнала:

[что-то что-то]

что-то нужно и символы и цифры переменной длины. Мой специальный файл журнала содержит строку с символами, описанными выше. Т.е.

Line 1: DEBUG [AS-kmksdf] Error occured!
Line 2: something somethingg..

Я хочу получить линию 1. Мои файлы журналов растут динамически, и я показываю это на экране с:

tail -f log.txt

Как я могу показать только эти специальные строки?

Я знаю, что я буду использовать grep, и мое регулярное выражение будет что-то. лайк

[[A-Z]*-[A-Z]*]

как объединить их с этой командой. Это не работает:

tail -f log.txt | grep [[A-Z]*-[A-Z]*]

Я использую Cygwin с Windows7 и могу запустить некоторые команды Linux на моем cmd.exe.

2 ответа2

2

Есть пара проблем с вашим регулярным выражением:

  • Прежде всего, я бы посоветовал вам всегда использовать ключ -P , который включает Perl-совместимые регулярные выражения.

    По умолчанию grep использует регулярные выражения Basic , которые не используются широко и страдают от непоследовательного пробела.

  • Как и [A-Z] , скобки имеют особое значение в регулярных выражениях. Чтобы использовать буквенную скобку в PCRE, используйте обратную косую черту с обратной косой чертой: \[ или \]

  • Регулярные выражения чувствительны к регистру, если вы не установили ключ -i .

  • * означает любое количество вхождений, в том числе (0). Возможно, вы захотите использовать + вместо (любое положительное число вхождений).

  • Всегда окружайте свое регулярное выражение двойными кавычками, иначе bash расширит символы.

В результате будет работать следующая команда:

tail -f log.txt | grep -Pi "\[[A-Z]+-[A-Z]+\]"
1
tail -f log.txt |grep -E '\[[a-zA-Z]*-[a-zA-Z]*\]'

Вы можете использовать Regexpal для проверки ваших выражений регулярных выражений. Также вы должны использовать -E на grep . Это не является обязательным и необязательным в этом случае, но позволяет вам использовать расширенные выражения регулярных выражений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .