1

Я, кажется, сопоставить две вещи, используя расширенные регулярные выражения:

  1. Новая линия. Я пытался [ \n] , [ \\n] , оба не работают
  2. Отрицательный взгляд на строку "timeout". Я пытался (?!тайм-аут)

Может кто-нибудь, пожалуйста, укажите правильный путь?

1 ответ1

3

Новая линия

Если вы используете bash, вы можете написать $'\n' . Это расширяется оболочкой, а не программой, поэтому она более надежна, чем другие варианты.

Если вы используете тире (например, внутри сценария оболочки), вы всегда можете использовать буквально заключенную в кавычки новую строку:

'
'

Не элегантно, но это работает.

Смотреть вперед

Вы должны будете использовать Perl-совместимые регулярные выражения (-P), так как расширенные регулярные выражения не поддерживают прогнозирование.

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

Использование ключа -v grep обычно выполняет это:

grep -E 'PATTERN' | grep -vE 'PATTERNtimeout'

эквивалентно

grep -P 'PATTERN(?!timeout)'

Чтобы подражать (?!timeout) внутри другого выражения, вы можете использовать это подвыражение:

(($|[^t])|t($|[^i])|ti($|[^m])|tim($|[^e])|time($|[^o])|timeo($|[^u])|timeou($|[^t]))
  • ($|[^t]) строка заканчивается здесь или первый символ не является t.
  • Строка t($|[^i]) заканчивается после символа t или второго символа i.
  • Строка ti($|[^m]) заканчивается после символа ti или третьего символа, отличного от tim.
  • ...

Если что-либо из вышеперечисленного совпадает, строка не является тайм-аутом.

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