2016-08-26 3 views
1

Использование Grep на Cygwin для поиска «employee_id» со следующими условиями:Экранирование метасимволов с помощью Grep на Cygwin

  • Не предваряется подчеркиванием
  • Сразу следует либо пространство, закрытые скобку, или период

выражение, которое следует работы в Regex Builder 2.05, используя образец текста, но не возвращает результаты при использовании в Grep как таковой:

grep -E -r '[^_]employee_id[ \]\.]' ./* 

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

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

ответ

1

Вы можете использовать:

grep -E -r '(^|[^_])employee_id[] .]' . 
  • (^|[^_]), как employee_id может быть в строке запуска или предшествовать любому не символ подчеркивания.

  • Не нужно избегать DOT или ] внутри класса символов. Но имейте в виду, что закрытие ]должен следовать сразу после открытия[

+0

Спасибо за быстрый ответ. Хороший улов в первом пункте, и я не думал о том, что вам не нужно избегать точки, но это имеет смысл. К сожалению, ваше решение также не дало никаких результатов, хотя я знаю, что есть совпадения. – SiliconBadger

+0

Я действительно обновил его перед вашим комментарием. Используйте 'grep -E -r '(^ | [^ _]) employee_id [].]' .' – anubhava

+1

Очень интересно! Раньше я задавался вопросом, не ушел ли я от закрытой скобки, если поймает, что есть еще одна закрытая скобка, охватывающая класс символов, но это не сработало. Теперь я вижу, что закрытая скобка должна немедленно следовать за открытой скобкой, и я не думал об этом. Спасибо за вашу помощь! – SiliconBadger

Смежные вопросы