我的正则表达式不适用于grep

thl*_*ood 6 unix linux grep

这是我正在使用的文件的文本:

(4 spaces)Hi, everyone

(1 tab)yes
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时 - grep '^[[:space:]]+' myfile它不会向stdout打印任何内容.

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

我正在使用GNU grep版本2.9.

And*_*zos 6

有几种不同的正则表达式语法.grep的默认值在grep文档中称为基本语法.

来自man grep(1):

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

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

grep '^[[:space:]]\+' FILE
Run Code Online (Sandbox Code Playgroud)

如果您需要来自正则表达式的更多功能,我还建议您查看Perl正则表达式语法.它们通常被认为是最具表现力的.有一个名为PCRE的C库可以模拟它们,并且grep链接到它.要使用它们(而不是基本语法),您可以使用grep -P.