1

我需要一个正则表达式来匹配,使用它在长请求字符串egrep中检查如下模式。如果我们将模式视为。我希望b是除 2、3、4 和 13 之外的任何值。1_0_5a_b_c

4

3 回答 3

3

这应该这样做:

grep -P '\b[^_]+_(?!(2|3|4|13)_)[^_]+_[^_]+\b' myfile

如果您的术语都是数字,请将其细化为:

grep -P '\b\d+_(?!(2|3|4|13)_)\d+_\d+\b' myfile

注意-P打开 perl 可比性的标志,它允许向前看

于 2013-10-07T13:44:16.347 回答
1

egrep 不支持前瞻。

您可以使用grep -P(PCRE)

grep -P '^[0-9]*_(?!(2|3|4|13)_)[0-9]*_[0-9]*$' file

或者,如果在字符串中间找到上述模式,则使用单词边界而不是行开始/结束锚点:

grep -P '\b[0-9]*_(?!(2|3|4|13)_)[0-9]*_[0-9]*\b' file
于 2013-10-07T13:37:38.050 回答
0

为了清楚和简单起见:

awk '/a_[^_]+_c/ && !/a_(2|3|4|13)_c/' file

但是,如果您发布了一些示例输入和预期输出,这将有助于我们为您提供帮助。

于 2013-10-07T19:44:57.353 回答