如何在grep的[]语法中取消^字符的特殊含义?
为什么grep '[\^%]bbb'会匹配到aaa\bbb
在POSIX标准的正则表达式括号表达式[]语法中,反斜杠\没有转义特殊字符的作用,会被识别为普通的字面量字符。你写的[\^%]实际会被解析为匹配\、^、%三个字符中的任意一个,所以aaa\bbb中\后紧跟bbb,自然会被匹配到。
如何在[]中取消^的特殊含义
^仅在位于括号表达式第一个字符的位置时才具有「取反匹配」的元字符含义,你只需要把它放到括号内非首字符的位置,就会自动被识别为普通字面量字符,不需要额外转义。
实现需求的正确写法
不需要依赖fgrep等其他工具,直接使用如下命令即可:
grep '[%^]bbb' t1
这个正则中^不在首位置,仅代表普通字符^,[%^]匹配%或^中的任意一个,后面紧跟bbb,正好匹配你需要的aaa^bbb和aaa%bbb两行。
内容的提问来源于stack exchange,提问作者Mikołaj Głodziak
相关产品推荐
相关产品推荐

