grep的基本表达式不支持\?

Ank*_*wal 105 linux grep

这不会产生任何输出.怎么会?

$ echo 'this 1 2 3' | grep '\d\+'
Run Code Online (Sandbox Code Playgroud)

但这些做到:

$ echo 'this 1 2 3' | grep '\s\+'
this 1 2 3

$ echo 'this 1 2 3' | grep '\w\+'
this 1 2 3
Run Code Online (Sandbox Code Playgroud)

Dae*_*yth 174

grep默认模式是(iirc)POSIX正则表达式,并且\d是pcre.你可以传递-P给gnu grep,用于perl-like regexp,也可以[[:digit:]]代替\d.

daenyth@Bragi ~ $ echo 1 | grep -P '\d'
1
daenyth@Bragi ~ $ echo 1 | grep '[[:digit:]]'
1
Run Code Online (Sandbox Code Playgroud)

  • BSD grep的-E模式包括\ d.但GNU grep的-E模式却没有.那太明显了我很震惊我现在才发现它. (6认同)

Cha*_* Ma 17

试试这个 $ echo 'this 1 2 3' | grep '[0-9]\+'

  • 也许“grep -E”选项会有所帮助 (2认同)
  • -E不起作用;你必须使用-P (2认同)
  • @bortunac 不,`\d` 也不是扩展正则表达式语法的一部分。(不过,它将消除反斜杠“+”的需要。) (2认同)