如何将不以序列开头的字符串与grep匹配

时间:2014-08-09 02:37:13

标签: regex grep

我正在运行以下命令:

grep -REin "Example::" .

我正试图更多地过滤我的结果。我希望将所有内容与Example::进行匹配,除非它以return开头,例如return Example::

MATCH

if (Example::test())

不匹配

if (something()) return Example::another()

2 个答案:

答案 0 :(得分:4)

您可以使用-v(反转匹配)选项执行以下操作。

grep -REin 'Example::' . | grep -vi 'return Example::'

或者使用选项-P,它将模式阐明为Perl正则表达式。

grep -RPin '(?<!return )Example::' .

这使用Negative Lookbehind来断言前面的内容不是返回这个词。

(?<!         # look behind to see if there is not:
  return     #   'return '
)            # end of look-behind
Example::    # 'Example::'

答案 1 :(得分:1)

您可以使用awk来解决此问题:

awk '/Example/ && !/return Example/' file
if (Example::test())