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

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

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

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

и

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

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

решение1

Путем... объединения шаблонов?

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

Или вы имели в виду, по сути, выполнение логической операции «И» между двумя шаблонами?

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

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

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

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

Я считаю, что первый вариант более лаконичен и прост в использовании.

решение2

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

grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]'

Связанный контент