如何使用多个AND模式运行grep?

Modified on: Sat, 30 Jun 2018 10:15:00 +0800

我想在模式之间使用隐式AND进行多模式匹配,即相当于在序列中运行多个greps:

grep pattern1 | grep pattern2 | ...

那么如何将其转换为类似的东西?

grep pattern1 & pattern2 & pattern3

我想使用单个grep因为我正在动态构建参数,所以一切都必须适合一个字符串。使用过滤器是系统功能,而不是grep,所以它不是它的参数。


请勿将此问题与以下内容混淆:

grep "pattern1\|pattern2\|..."

这是OR多模式匹配。

最佳答案

agrep可以使用以下语法执行此操作:

agrep 'pattern1;pattern2'

使用GNU grep,在使用PCRE支持构建时,您可以执行以下操作:

grep -P '^(?=.*pattern1)(?=.*pattern2)'

使用ast grep

grep -X '.*pattern1.*&.*pattern2.*'

(将.* s添加为<x>&<y>匹配与<x>相匹配的字符串<y> 完全a&b永远不会匹配,因为没有这样的字符串可以 ab同时)。

如果图案不重叠,您也可以这样做:

grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'

最好的可移植方式可能是已经提到的awk

awk '/pattern1/ && /pattern2/'

使用sed

sed -e '/pattern1/!d' -e '/pattern2/!d'

请注意,所有这些都会有不同的正则表达式语法。


相关问答

添加新评论