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

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

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

а также

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

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

  • Захват в переменных оболочки аргументов после команды (между скобками)
  • Почему имена файлов трубопроводов в VIM прерываются, когда я возвращаюсь в оболочку?
  • Заменить «-из» на «это» в начале строки
  • grep содержимое файлов на основе списка файлов
  • Regex ищет корни слова с общими префиксами
  • Совместить данные из двух разных файлов
  • Сравнить awk vs. grep
  • Есть ли способ показать только несанкционированные строки в текстовом файле / скрипте?
  • 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 - лучшая ОС в мире.