为什么grep 命令会忽略搜索字符串中的句点?

rom*_*rav 2 command-line grep quoting regular-expression

我正在使用的命令:

find . -type f -name "*.sql" -exec grep -i -l 'schema_name.' {} +
Run Code Online (Sandbox Code Playgroud)

我要搜索的是所有包含schema_name.. 但是 find 命令忽略了最后一个.,只是在寻找schema_name而不是schema_name.

cuo*_*glm 13

那是grep问题,不是find

grep默认情况下使用正则表达式匹配模式,模式schema_name.意味着字符串后面的任何字符schema_name

如果你想.从字面上匹配点,你必须用反斜杠转义它\

find . -type f -name "*.sql" -exec grep -il 'schema_name\.' {} +
Run Code Online (Sandbox Code Playgroud)

或使用-F选项:

find . -type f -name "*.sql" -exec grep -Fil 'schema_name.' {} +
Run Code Online (Sandbox Code Playgroud)

  • @romhail:奇怪,你的操作系统是什么? (9认同)
  • @AL 如果他的`grep` 版本不支持`-F`,则很可能不支持`--version`。`-F` 至少是 [POSIX 标准](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html) 的一部分,并且所讨论的 `grep` 显然不支持. (3认同)