以下是我正在使用的文件的文本:
(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。 输入更容易,并且具有更好的正则表达式。