2

我试图在正则表达式\s中指定while 空格grep,但似乎 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

壳牌:试过了sh,,,bashtcsh

$ grep --version
grep (GNU grep) 2.5.1

编辑

我尝试grep -P按照答案中的建议使用,但不幸的是它无法在我的系统上运行并引发以下错误:

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

2 回答 2

2

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

POSIX and ERE Regex

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

例如

echo '   foo' | grep -P '^\s*foo'
   foo
于 2013-10-18T10:16:34.713 回答
2

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

使用 Perl 正则表达式模式:

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

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

man grep

它在那里说,例如:

符号 \< 和 > 分别匹配单词开头和结尾的空字符串。符号 \b 匹配单词边缘的空字符串,而 \B 匹配不在单词边缘的空字符串。符号 \w 是 [ [:alnum:]] 的同义词,\W 是 [^ [:alnum:]] 的同义词。

没有提到其他 [a-zA-Z]

版本:

grep (GNU grep) 2.14

在 Debian 上

于 2013-10-18T10:16:43.657 回答