Подтвердить что ты не робот

Как использовать регулярное выражение OR в grep в Cygwin?

Мне нужно вернуть результаты для двух разных совпадений из одного файла.

grep "string1" my.file

правильно возвращает единственный экземпляр string1 в my.file

grep "string2" my.file

правильно возвращает единственный экземпляр string2 в my.file

но

grep "string1|string2" my.file

ничего не возвращает

В тестовых приложениях regex этот синтаксис правильный, поэтому почему он не работает для grep в cygwin?

4b9b3361

Ответ 1

Использование символа | без экранирования в основном регулярном выражении будет соответствовать только литералу |. Например, если у вас есть файл с содержимым

string1
string2
string1|string2

Использование grep "string1|string2" my.file будет соответствовать только последней строке

$ grep "string1|string2" my.file
string1|string2

Чтобы использовать оператор чередования |, вы можете:

  • Используйте основное регулярное выражение (просто grep) и избегайте символа | в регулярном выражении

    grep "string1\|string2" my.file

  • Используйте расширенное регулярное выражение с egrep или grep -E, поскольку Юлиан уже указал в его ответ

    grep -E "string1|string2" my.file

  • Если это два разных шаблона, которые вы хотите сопоставить, вы также можете указать их отдельно в параметрах -e:

    grep -e "string1" -e "string2" my.file

Вы можете найти следующие разделы справочника grep:

Ответ 2

Вам может потребоваться либо использовать egrep, либо grep -E. Символ трубы OR является частью расширенного grep и может не поддерживаться основным Cygwin grep.

Кроме того, вам, вероятно, нужно избежать символа трубы.

Ответ 3

Самый лучший и самый понятный способ, который я нашел, - это: grep -e REG1 -e REG2 -e REG3 _FILETOGREP _

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

Ответ 4

Вы можете найти эту информацию, прочитав точное руководство: grep (1), которое вы можете найти, запустив "man grep". В нем описывается разница между grep и egrep, а также основные и регулярные выражения, а также много полезной информации о grep.