grep 适用于 \s,但不适用于 \s+

grep works with \s, but not with \s+

提问人:Alexey Starinsky 提问时间:9/20/2023 最后编辑:Ed MortonAlexey Starinsky 更新时间:9/22/2023 访问量:58

问:

以下命令适用于\s

echo "\"Using Android 10\"" | grep "\".*\sAndroid\s.*\""

和印刷品

"Using Android 10"

但是,如果按如下方式添加 +:

echo "\"Using Android 10\"" | grep "\".*\sAndroid\s+.*\""

模式停止匹配。

怎么了?\s+

正则表达式 bash grep

评论

1赞 user1934428 9/21/2023
在基本的 POSIX 正则表达式中,\s 匹配一个文字反斜杠,后跟字母 ,而 a 匹配一个文字。你希望实现什么?请查看此页面,了解您有哪些可用的正则表达式字符。注意:GNU(没有其他选项)将该模式解释为“扩展正则表达式”(ERE),而在BSD(即MacOS)上,该模式被理解为“基本正则表达式”(BRE)。s++grepgrep

答:

4赞 Gilles Quénot 9/20/2023 #1

错误的是又名基本正则表达式中缺少的反斜杠:BRE

echo '"Using Android 10"' | grep '".*\sAndroid\s\+.*"'
                                                ^

如果您不想使用反斜杠,请使用 aka Extended REgexERE

echo '"Using Android 10"' | grep -E '".*\sAndroid\s+.*"'

或使用 Perl 兼容正则表达式PCRE

echo '"Using Android 10"' | grep -P '".*\sAndroid\s+.*"' 

如果您确实支持该开关,这是最可靠的,因为执行此操作的方法有:-PPOSIX

[[:space:]]\+
[[:space:]]{1,}

最新版本的 支持 。\sGNUgrep

评论

0赞 demitt 9/21/2023
-P如果您想使用成熟的正则表达式 (PCRE),这是最好的方法。在这种情况下,您不必转义正则表达式元符号(例如,)。+
0赞 Gilles Quénot 9/22/2023
看来我已经回答了这个问题