我的正则expression式不工作在grep

以下是我正在使用的文件的文本:

(4 spaces)Hi, everyone (1 tab)yes 

当我运行这个命令 – grep '^[[:space:]]+' myfile – 它不打印任何东西到标准输出。

为什么它不匹配文件中的空格?

我正在使用GNU grep版本2.9。

有几种不同的正则表达式语法。 在grep文档中,grep的缺省称为基本语法。

从人grep(1)

 In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \). 

因此,而不是+你应该输入\+

 grep '^[[:space:]]\+' FILE 

如果你需要更多的正则表达式的权力,我也鼓励你看看Perl的正则表达式语法。 他们通常被认为是最有表现力的。 有一个名为PCRE的C库模拟它们,并链接到它。 要使用它们(而不是基本语法),可以使用grep -P

你可以使用-E

 grep -E '^[[:space:]]+' FILE 

这使扩展的正则表达式。 没有它,你会得到BREs(基本的正则表达式),它有一个更简化的语法。 或者,你可以运行egrep而不是相同的结果。

我发现你需要逃避+

 grep '^[[:space:]]\+' FILE 

尝试使用grep -P '^\s+' ,只要你使用的是GNU grep。 输入更容易,并且具有更好的正则表达式。