我如何连接这两个 grep 正则表达式

1 grep regular-expression

我有这两个 grep 正则表达式

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt
Run Code Online (Sandbox Code Playgroud)

grep -e '[Ee][Ee].*[Yy].*[Yy]' first.txt
Run Code Online (Sandbox Code Playgroud)

如何将这两个连接成一个正则表达式?

Dop*_*oti 5

通过..连接模式?

grep -e '[Yy].*[Yy].[Ee][Ee][Ee][Ee].*[Yy].*[Yy]' first.txt
Run Code Online (Sandbox Code Playgroud)

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

如果是后者,则需要伪造它,因为 whilegrep具有内置的 OR ( |) 和 NOT ( -v; [^]),它没有内置的 AND。一种方法是将一个的输出通过管道传输grep到另一个:

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt | grep '[Ee][Ee].*[Yy].*[Yy]' 
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用逻辑 OR(为简洁起见缩写)以任一顺序查找两个模式:

grep -Ee 'pattern1.*pattern2|pattern2.*pattern1' input.txt
Run Code Online (Sandbox Code Playgroud)

我发现第一个更简洁,更易于维护。