假设我有一个包含第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
现在我想知道为什么引号不起作用,如果我只使用 引号而不转义星号。
答案 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