我试图在包含许多子目录的目录中的包含“ Mutual_Values_23.0”的文件中找到特定行。我知道此行号存储在以“ gnuout_mutual _.... txt”开头的文件中(文件名的省略号部分是时间戳,因此会有所不同)。
我想知道是否有一种方法可以指定“ grep”命令以仅针对以“ gnuout_mutual _.... txt”开头的文件查看子目录。
我尝试过
grep -r "Mutual_Values_23.0" *
但这要花很长时间
答案 0 :(得分:1)
使用find
在所有子目录中搜索带有搜索字符串“ Mutual_Values_23.0”的“ gnuout ... txt”文件
find . -mindepth 1 -name gnuout_mutual_\*.txt -type f -exec grep "Mutual_Values_23.0" {} +
答案 1 :(得分:1)
您可以使用以下grep选项:
--include=GLOB
Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
对于行号,您应该使用-n
选项。
在要查找的文件夹的根目录中,可以使用以下最终命令:
grep -nr "Mutual_Values_23.0" --include="gnuout_mutual_*txt"
答案 2 :(得分:1)
如果您使用bash,则可以使用 globstar 选项:
globstar
如果设置,则在路径名扩展上下文中使用的模式**
将 匹配所有文件以及零个或多个目录和子目录。 如果模式后跟/
,则仅目录和 子目录匹配。
因此您可以像这样使用它:
$ shopt -s globstar
$ grep "search_string" **/glob-pattern
或对于OP:
$ shopt -s globstar
$ grep Mutual_Values_23.0 **/gnuout_mutual_*.txt
答案 3 :(得分:0)
GNU grep具有--include GLOB
选项,其中GLOB
可用于指定您需要匹配的文件名模式。
grep -rn --include 'gnuout_mutual_*txt' 'Mutual_Values_23.0' .
答案 4 :(得分:0)
使用此命令:
$ find . -name "*Mutual_Values_23.0*"
注意:在要搜索文件集的目录中运行此命令。
希望它会有所帮助,加油!
答案 5 :(得分:0)
您可以使用find
搜索文件并将结果传递给grep。
find /directory_where_to_search/ -iname 'gnuout_mutual_*.txt' | xargs grep 'Mutual_Values_23.0' -sl