以下是我正在使用的文件的文字:
(4 spaces)Hi, everyone
(1 tab)yes
当我运行此命令时 - grep '^[[:space:]]+' myfile
- 它不会向stdout打印任何内容。
为什么它不匹配文件中的空格?
我正在使用GNU grep版本2.9。
答案 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+'
。键入更容易,并且具有更好的正则表达式。