如何在grep中转义括号

Meg*_*Rel 57 grep escaping

我想在目录中的所有JavaScript文件中grep函数调用'init()'.我如何使用grep执行此操作?

特别是,我如何逃避括号,()

Mat*_*hen 51

这取决于.如果您使用常规grep,则不会转义:

echo '(foo)'|grep '(fo*)'
Run Code Online (Sandbox Code Playgroud)

如果要将括号用作分组,则实际上必须转义.

如果使用扩展正则表达式,则执行转义:

echo '(foo)'|grep -E '\(fo*\)'
Run Code Online (Sandbox Code Playgroud)

  • @Megha,只是为了澄清,这是一个shell错误,因为你没有引用正则表达式. (4认同)
  • @Marcus Grep不关心(或知道)您是使用双引号还是单引号.这是你的shell [解析引号](http://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash). (3认同)
  • 当我在目录中使用 grep -rin init() * 时,它会在意外标记附近抱怨语法错误(。我该如何解决这个问题。 (2认同)
  • 我的问题是我做了 `grep "{"` 而不是 `grep '{'`。双引号和单引号对于 grep 的特殊字符有很大的不同。 (2认同)

Dav*_*rby 23

如果要搜索字符串"init()",请使用fgrep "init()"grep -F "init()".

这两个都将进行固定的字符串匹配,即将模式视为要搜索的纯字符串而不是正则表达式.我相信它也比正则表达式搜索更快.