我如何连接这两个 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

或者您的意思是本质上对两种模式进行逻辑与?

如果是后者,你需要伪造它,因为虽然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]'

相关内容