为什么我不能在grep中使用^ \ s?

时间:2018-12-20 10:58:48

标签: regex grep

以下两种正则表达式均适用。

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

但是,所有以下失败。我在git bash和腻子中都尝试过。

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

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

如果我在debuggex中尝试使用^\s,那么它将起作用。

Regular expression visualization

Debuggex Demo

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

1 个答案:

答案 0 :(得分:1)

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

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

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

请参见online demo

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