我试图在\s
正则表达式中使用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
!
Que 1。是否可以grep
识别\s
?
Que 2。我在grep
哪里可以找到列表支持的正则表达式转义序列?
操作系统:RHEL5
外壳:已尝试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**
答案 0 :(得分:2)
没有grep或egrep无法识别\s
或\d
(PCRE特定构造),因为它使用ERE。请参阅此参考指南:
虽然如果您使用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上