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

时间:2012-03-21 00:53:32

标签: linux unix grep

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

(4 spaces)Hi, everyone

(1 tab)yes

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

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

我正在使用GNU grep版本2.9。

4 个答案:

答案 0 :(得分:6)

有几种不同的正则表达式语法。 grep的默认设置在grep文档中称为 basic 语法。

来自人 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链接到它。要使用它们(而不是基本语法),您可以使用 grep -P

答案 1 :(得分:2)

您可以使用-E

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

这可以扩展正则表达式。如果没有它,您将获得具有更简化语法的BRE(基本正则表达式)。或者,您可以使用相同的结果运行egrep

答案 2 :(得分:1)

我发现你需要逃避+

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

答案 3 :(得分:0)

如果您使用的是GNU grep,请尝试使用grep -P '^\s+'。键入更容易,并且具有更好的正则表达式。