如何在匹配模式的特定文件中搜索

B F*_*ley 5 shell search recursive wildcards

如何在特定文件中找到匹配模式的单词。例如,versionCMake*当前目录中递归找到的文件中搜索。

Sté*_*las 7

如果要查看文件名和行号,POSIXly:

find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
Run Code Online (Sandbox Code Playgroud)

(您不想在;这里使用它会grep为每个文件运行一个)。这是 GNUism 的标准等价物:

find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
Run Code Online (Sandbox Code Playgroud)

find(在第一个),xargs(在第二个)将传递尽可能多的参数,grep而不会超过您可以传递给命令的参数数量的限制。在进行拆分时,可能会发生最后一次运行时只传递一个参数的grep情况,在这种情况下grep不会打印文件名。这就是为什么你需要/dev/null那里(或-H使用 GNU grep)。

使用-type f,我们只考虑常规文件(不是设备、符号链接、管道、目录……)。

如果你想使用 GNUisms,你可以使用 GNU 的grep能力来降低目录树:

 grep -rHnF --include='CMake*' version .
Run Code Online (Sandbox Code Playgroud)

您不想使用-R因为这会导致grep在下降目录树并从设备、fifos、套接字读取时遵循符号链接...

该版本更安全、更高效,但不便于携带。