我需要一个正则表达式来匹配,使用它在长请求字符串egrep
中检查如下模式。如果我们将模式视为。我希望b是除 2、3、4 和 13 之外的任何值。1_0_5
a_b_c
问问题
2178 次
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 回答