
У меня есть эти два регулярных выражения 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]'