为什么 grep 有时显示文件名,有时不显示?

Mar*_*rco 11 grep wildcards

有人可以向我解释为什么我没有得到示例 1 中的完整路径吗?

示例 1 - 返回找到的行

grep MODIFY /opt/releases/packages/cr_c_cr6/sas/dbms/*/*;
outcome: MODIFY
Run Code Online (Sandbox Code Playgroud)

示例 2 - 返回完整路径

grep MODIFY /opt/releases/packages/cr666/sas/dbms/*/*;
/opt/releases/packages/cr666/sas/dbms/sti/FA_DISCLOSURE.ddl:MODIFY QUANTITY NUMBER;
Run Code Online (Sandbox Code Playgroud)

我找到了解决方案,但我想了解这里发生了什么。1 个命令,不同的结果/处理。

Mat*_*Mat 15

在您的第一个示例中,glob 必须已扩展为单个文件。在这种情况下,grep不(默认情况下)不添加文件名。

第二个示例必须扩展为多个文件名,并且grep在这种情况下确实在文件名之前。

您可以使用该-H选项始终将文件名添加到输出中,或者-h从不获取它。

如果您的 grep 缺少这些选项,您可以使用grep REGEX /path/to/pattern/* /dev/null始终获取文件名(从来没有任何命中,/dev/null但它算作文件名),或者cat /path/to/pattern/* | grep REGEX从不获取文件名。