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

时间:2013-08-12 16:00:39

标签: 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

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

2 个答案:

答案 0 :(得分: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.)

例如:

$ grep -F "ab*c" <<< "ab*c"
ab*c

答案 1 :(得分:6)

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

*在正则表达式中具有特殊含义。你必须逃避它以符合它的字面意思。在没有转义*的情况下,grep会尝试匹配ab+(any number of b)+c

例如:

abbbbbbbbbbbbc