我有这两个 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
或者您的意思是本质上对两种模式进行逻辑与?
如果是后者,你需要伪造它,因为虽然grep
有内置的 OR ( |
) 和 NOT ( -v
; [^]
),但它没有内置的 AND。一种方法是将一个的输出通过管道传输grep
到另一个:
grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt | grep '[Ee][Ee].*[Yy].*[Yy]'
另一种方法是使用逻辑 OR(为简洁起见缩写)以任一顺序查找串联的两种模式:
grep -Ee 'pattern1.*pattern2|pattern2.*pattern1' input.txt
我发现第一个更简洁且更易于维护。
答案2
您可以通过在每个模式之间使用来同时 grep 两个模式\|
。
grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]'