我需要使用egrep
匹配正则表达式,以便在长请求字符串中检查类似以下1_0_5
的模式。如果我们将模式视为a_b_c
。我希望 b 除了2,3,4和13之外的任何东西。
答案 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
如果您发布了一些示例输入和预期输出,那将有助于我们帮助您。