连字符是否需要以正则表达式进行转义?

时间:2017-01-17 02:14:16

标签: regex linux grep

以下内容会返回一系列结果,包括那些包含" - > emit"

的结果
grep -rnw '/var/www/react' -e ">emit"

但是以下内容没有返回结果

grep -rnw '/var/www/react' -e "->emit"

为什么?

2 个答案:

答案 0 :(得分:1)

您需要删除-w选项。它说要将表达作为一个整体来对待。 word必须以非字字符为界,即只能用[a-zA-Z0-9_]以外的字符包围。

emit会匹配emit_emit->emit,但不会匹配remit

我猜测您的->emit正在尝试匹配a->emit之类的内容,但因为aword字符而无法匹配。

答案 1 :(得分:1)

它是一个完整的单词匹配,请找到 grep Documentation

  

假设我想搜索整个单词,而不是单词的一部分?

     

grep -w'hello'*

     

仅搜索整个单词的'hello'实例;它确实   不匹配'奥赛罗'。要获得更多控制权,请使用'\<'和'\>'来匹配   单词的开头和结尾。例如:

     

grep'hello \>' *

     

仅搜索以“hello”结尾的单词,因此它匹配单词   “奥赛罗”。