你为什么要逃避 和撇号之间的grep?

Kev*_*Kev 2 bash grep escaping

的印象是在单引号内,例如'pattern',bash特殊字符没有插值,因此只需要单独转义单引号.

为什么echo "123" | grep '[0-9]+'输出什么,而echo "123" | grep '[0-9]\+'(加号逃脱)输出123呢?(同样地,echo "123" | grep '3|4'除非你逃脱,否则不输出|.)

这是在CentOS 6.5上的bash 4.1.2和grep 2.6.3下.

cda*_*rke 6

grep使用基本正则表达式,如sed和vi.因为你必须逃避元字符,这很乏味.

您可能需要扩展正则表达式,因此请使用egrepgrep -E(取决于使用的版本).检查你的man grep.

另请参阅GNU文档以获取所涉及字符的完整列表.

目前,大多数语言都使用扩展正则表达式(ERE),它们更易于使用.基本正则表达式(BRE)实际上是一种回归.

  • 澄清一下:扩展正则表达式不是GNU主义.它们完全是[POSIX]的一部分(http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04). (2认同)