假设我有一个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
现在我想知道为什么引号不起作用,如果我只能使用引号而不转义星号。
使用该标志-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
首先,你应该记住:regex =/= glob
*
在正则表达式中有特殊含义。你必须逃避它才能从字面上匹配它。不转义*
, grep 尝试匹配ab+(any number of b)+c
例如:
abbbbbbbbbbbbc