首页 > 解决方案 > 为什么我不能将 ^\s 与 grep 一起使用?

问题描述

在我的情况下,下面的两个正则表达式都有效。

grep \s
grep ^[[:space:]]

但是,以下所有这些都失败了。我在 git bash 和 putty 中都试过了。

grep ^\s
grep ^\s*
grep -E ^\s
grep -P ^\s
grep ^[\s]
grep ^(\s)

最后一个甚至会产生语法错误。

如果我^\s在 debuggex 中尝试它可以工作。

正则表达式可视化

调试演示

如何找到以空格字符开头的行grep?我必须使用[[:space:]]吗?

标签: regexgrep

解决方案


grep \s适合您,因为您的输入包含s. 在这里,您转义s并匹配s,因为它没有被解析为匹配正则表达式转义的空格。如果您使用grep ^\\s,您将匹配以空格开头的字符串,因为\\它将被解析为文字\字符。

一个更好的主意是启用 POSIX ERE 语法-E并引用该模式:

grep -E '^\s' <<< "$s"

查看在线演示

s=' word'
grep ^\\s <<< "$s"
# =>  word
grep -E '^\s' <<< "$s"
# =>  word

推荐阅读