负面前瞻的正则表达式

时间:2013-10-07 13:33:20

标签: regex grep

我需要使用egrep匹配正则表达式,以便在长请求字符串中检查类似以下1_0_5的模式。如果我们将模式视为a_b_c。我希望 b 除了2,3,4和13之外的任何东西。

3 个答案:

答案 0 :(得分:2)

这应该这样做:

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

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

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

请注意-P标志以打开perl可比性,这样可以预见

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为了清晰和简单:

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

如果您发布了一些示例输入和预期输出,那将有助于我们帮助您。

相关问题