工作这里的文件我的工作文字:我的正则表达式不grep的
(4 spaces)Hi, everyone
(1 tab)yes
当我运行此命令 - grep '^[[:space:]]+' myfile
- 它不打印任何东西到标准输出。
为什么它不匹配文件中的空格?
我使用GNU grep版本2.9。
工作这里的文件我的工作文字:我的正则表达式不grep的
(4 spaces)Hi, everyone
(1 tab)yes
当我运行此命令 - grep '^[[:space:]]+' myfile
- 它不打印任何东西到标准输出。
为什么它不匹配文件中的空格?
我使用GNU grep版本2.9。
有几种不同的正则表达式语法。在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。
你可以使用-E
:
grep -E '^[[:space:]]+' FILE
这使得扩展的正则表达式。没有它,你会得到BREs(基本正则表达式),它具有更简化的语法。或者,您可以运行egrep
而不是相同的结果。
尝试grep -P '^\s+'
代替,只要你使用GNU的grep。输入更容易,并且具有更好的正则表达式。
这是误导。提问者没有使用任何需要扩展语法的功能。他只需要根据基本语法来反斜杠+符号。 – 2012-03-21 01:06:02
这是真的 - 没有意识到它接受BRE中的字符类。将更新。 – FatalError 2012-03-21 01:10:42