10

假设我有一个abc.txt包含 line的文件ab*cd。当我grep使用ab*cd引号但没有转义星号时,它不起作用:

> grep ab*c abc.txt
> grep "ab*c" abc.txt
> grep 'ab*c' abc.txt

当我同时使用引号和转义时,它确实有效

> grep "ab\*c" abc.txt
A B C D
> grep 'ab\*c' abc.txt
A B C D

现在我想知道为什么引号不起作用,如果我只能使用引号而不转义星号。

4

2 回答 2

17

使用该标志-F搜索固定字符串——而不是正则表达式。来自man grep

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

例如:

$ grep -F "ab*c" <<< "ab*c"
ab*c
于 2013-08-12T16:11:12.973 回答
7

首先,你应该记住:regex =/= glob

*在正则表达式中有特殊含义。你必须逃避它才能从字面上匹配它。不转义*, grep 尝试匹配ab+(any number of b)+c

例如:

abbbbbbbbbbbbc

于 2013-08-12T16:03:05.607 回答