2012-03-21 115 views
6

工作这里的文件我的工作文字:我的正则表达式不grep的

(4 spaces)Hi, everyone 

(1 tab)yes 

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

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

我使用GNU grep版本2.9。

回答

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

2

你可以使用-E

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

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

+0

这是误导。提问者没有使用任何需要扩展语法的功能。他只需要根据基本语法来反斜杠+符号。 – 2012-03-21 01:06:02

+0

这是真的 - 没有意识到它接受BRE中的字符类。将更新。 – FatalError 2012-03-21 01:10:42

1

我找到你需要躲避+

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

我对此感到困惑,它是如何工作的 – dldnh 2012-03-21 01:02:51

+0

@dldnh:看到我的回答 – 2012-03-21 01:05:14

+0

aha,谢谢,@ user1131467! – dldnh 2012-03-21 01:06:31

0

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