我有这两个 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)
如何将这两个连接成一个正则表达式?
通过..连接模式?
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)
我发现第一个更简洁,更易于维护。