关于grep中\s可正常匹配但\s+无法匹配的问题咨询
关于grep中\s可正常匹配但\s+无法匹配的问题咨询
嗨,我来帮你捋清楚这个问题~
问题根源在于grep默认使用的正则规则:默认情况下grep采用的是基础正则表达式(BRE),在这种模式里,+只是一个普通字符,不是用来表示“匹配一次或多次”的量词。你之前用\s能正常匹配空白字符,是因为\s在BRE里已经被识别为空白字符的转义序列,但\s+里的+会被当成字面意义的加号来匹配——相当于你要找的是“空白字符后面跟着加号”的场景,这显然和原文本不匹配,所以模式就失效了。
给你两个可行的解决办法:
- 第一种:切换到扩展正则表达式模式,给grep加上
-E参数(或者直接用egrep,它和grep -E完全等价),这样+就会被当作量词生效。修改后的命令是:echo "\"Using Android 10\"" | grep -E "\".*\sAndroid\s+.*\"" - 第二种:如果不想用扩展正则,就在基础正则里把
+转义成\+,让它具备量词的功能。命令改成:echo "\"Using Android 10\"" | grep "\".*\sAndroid\s\+.*\""
试试这两种方式,都能正常匹配到"Using Android 10"的结果哦。
备注:内容来源于stack exchange,提问作者Alexey Starinsky
相关产品推荐
相关产品推荐

