正则否定字符类与字面量`]`配合失效问题排查
grep正则匹配失败的原因及解决方法
问题出在扩展正则表达式(ERE)的字符类语法规则上:
- 你使用
grep -E启用了ERE模式,在ERE的[^...]字符类中,反斜杠无法转义]。你写的[^\]]会被grep错误解析:[^开启字符类,\被当作普通字符,紧接着的]会被识别为字符类的结束标记,最后剩下的]变成正则表达式的独立部分。这就导致你的正则实际是ERROR \[[^\]加上额外的],自然匹配不到目标内容。
正确的写法有两种:
- 把
]放在字符类的最开头,让它被当作字面量而非结束标记:grep -Eo "ERROR \[[^]]\]" test.txt - 如果坚持用转义的方式,需要切换到基本正则表达式(BRE)模式(去掉
-E参数),此时反斜杠转义生效:grep -o "ERROR \[[^\]\]" test.txt
执行第一种写法就能成功匹配ERROR [x]。
内容的提问来源于stack exchange,提问作者glacier
相关产品推荐
相关产品推荐

