如何在不逃避的情况下grep星号?

Mic*_*ael 6 bash grep escaping

假设我有一个abc.txt包含行的文件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 
ab*cd
> grep 'ab\*c' abc.txt 
ab*cd

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

Rub*_*ens 12

使用该标志-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.)
Run Code Online (Sandbox Code Playgroud)

例如:

$ grep -F "ab*c" <<< "ab*c"
ab*c
Run Code Online (Sandbox Code Playgroud)


Ken*_*ent 6

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

*在正则表达式中有特殊意义.你必须逃避它以符合它的字面意思.没有逃脱*,grep试图匹配ab+(any number of b)+c

例如:

abbbbbbbbbbbbc