Как объединить эти два grep-регулярных выражения

У меня есть два регулярных выражения grep

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt 

а также

 grep -e '[Ee][Ee].*[Yy].*[Yy]' first.txt 

Как объединить эти два в одно регулярное выражение?

  • grep с переменной
  • grep инвертированное соответствие по файлу, а не по строке по строке
  • Как правильно выполнить grep на выходе ldd?
  • Есть ли способ показать только несанкционированные строки в текстовом файле / скрипте?
  • Рекурсивный grep для слов в определенном типе файла
  • Вырезать имя файла и результат поиска grep из пути
  • Каков максимальный диапазон символов grep в bash?
  • Удалите несколько строк после соответствия шаблону, но только после соответствия шаблону
  • 2 Solutions collect form web for “Как объединить эти два grep-регулярных выражения”

    Посредством конкатенации шаблонов?

     grep -e '[Yy].*[Yy].[Ee][Ee][Ee][Ee].*[Yy].*[Yy]' first.txt 

    Или вы имели в виду, по сути дела, логическое И двух шаблонов?

    Если последнее, вам нужно подделать его, так как в то время как grep имеет встроенные OR ( | ) и NOT ( -v ; [^] ), он не имеет встроенного И. Один из способов заключается в том, чтобы вывести выход одного grep в другой:

     grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt | grep '[Ee][Ee].*[Yy].*[Yy]' 

    Другой способ – искать оба шаблона последовательно, в любом порядке, с логическим ИЛИ (сокращенно для краткости):

     grep -Ee 'pattern1.*pattern2|pattern2.*pattern1' input.txt 

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

    Вы можете использовать grep для обоих шаблонов сразу, используя \| между каждой моделью.

     grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]' 
    Linux и Unix - лучшая ОС в мире.