grep中支持的正则表达式转义序列

时间:2013-10-18 10:07:54

标签: regex linux unix grep

我试图在\s正则表达式中使用grep指定空格,但似乎grep无法识别它。 grep -Eegrep也无效。

以下是我的试验:

$ 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

Que 1。是否可以grep识别\s

Que 2。我在grep哪里可以找到列表支持的正则表达式转义序列?

操作系统RHEL5

外壳:已尝试shbashtcsh

$ grep --version
grep (GNU grep) 2.5.1

修改

我按照答案中的建议尝试使用grep -P,但不幸的是,它不能解决我的系统抛出以下错误:

$ echo '   foo' | grep -P '^\s*foo'
grep: The -P option is not supported   <-- **ERROR**

2 个答案:

答案 0 :(得分:2)

没有grep或egrep无法识别\s\d(PCRE特定构造),因为它使用ERE。请参阅此参考指南:

POSIX and ERE Regex

虽然如果您使用grep -P,则会识别所有PCRE功能。

e.g。

echo '   foo' | grep -P '^\s*foo'
   foo

答案 1 :(得分:2)

  

Que 1.是否可以让grep识别\ s?

使用Perl正则表达式模式:

echo '   foo' | grep -P '^\s*foo'
  

Que 2.我在哪里可以找到grep中列表支持的正则表达式转义序列?

man grep

它说,例如:

  

符号\&lt;和&gt;分别匹配单词开头和结尾的空字符串。符号\ b匹配单词边缘的空字符串和\ B.   匹配空字符串,前提是它不在单词的边缘。符号\ w是[ [:alnum:]]的同义词,\ W是[^ [:alnum:]]的同义词。

未提及其他[a-zA-Z]

版本:

grep (GNU grep) 2.14

在Debian上