【发布时间】:2013-10-18 10:07:54
【问题描述】:
我试图使用 \s 在 grep 正则表达式中指定 while 空格,但似乎 grep 无法识别它。 grep -E 或 egrep 也无法使用它。
这是我的试验:
$ echo ' foo' | grep '^ *foo'
foo
$ echo ' foo' | grep '^\s*foo' <-- **No Output**
$ echo ' foo' | grep -E '^\s*foo' <-- **No Output**
$ echo ' foo' | egrep '^\s*foo' <-- **No Output**
$ echo ' foo' | grep '^[[:space:]]*foo'
foo
我还注意到它可以识别\w,但不能识别\d!
阙1.可以让grep认出\s吗?
Que 2.在哪里可以找到grep 中支持的正则表达式转义序列列表?
操作系统:RHEL5
Shell:试过sh、bash、tcsh
$ grep --version
grep (GNU grep) 2.5.1
编辑
我尝试按照答案中的建议使用grep -P,但不幸的是它无法在我的系统上运行并引发以下错误:
$ echo ' foo' | grep -P '^\s*foo'
grep: The -P option is not supported <-- **ERROR**
【问题讨论】:
-
仅供参考...在 PERL 中,grep() 接受 \s。我已经在 PERL 中尝试了以下程序,它工作正常。
my @Arr = (" Test", "Test"); @Arr = grep {$_ =~ /^\s+Test/} @Arr; print "@Arr";输出:“测试” -
@Anand 是的。我注意到 PERL 中的 grep 工作正常。我的目的是让它在 linux shell 上工作