我有一个基于事件的目录结构。
在这些事件中,我有一种类型的文件包含或不包含我需要搜索的模式。我想将积极的结果存储在一个单独的文件中。
我的第一种方法是:
find . /EVENT*/'filename' | grep 'searchtext' head -2 > error_file
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。我被告知,这是不可能的结合find
,并grep
以这种方式,所以我需要怎么做呢?
hee*_*ayl 14
这是一个通用模式:
find /directory/containing/files -type f -exec grep -H 'pattern_to_search' {} +
Run Code Online (Sandbox Code Playgroud)
这里首先find
将搜索包含必要文件的目录中的所有文件,您也可以使用通配符例如*.txt
仅查找以.txt
. 在这种情况下,命令将是:
find /directory/containing/files -type f -name "*.txt" -exec grep -H 'pattern_to_search' {} +
Run Code Online (Sandbox Code Playgroud)
找到必要的文件后,我们正在使用-exec grep -H 'pattern_to_search' {} +
(-H
将在找到模式的位置打印文件名)在这些文件中搜索所需的模式。在这里,您可以将其{}
视为包含要搜索的文件,并且+
需要在最后使用 with-exec
以便-exec
只分叉一次,即grep
会像命令一样进行搜索grep -H 'pattern_to_search' file_1.txt file_2.txt file_3.txt
。
另一种有效的方法是:
find /directory/containing/files -type f -print0 | xargs -0 grep "test to search"
Run Code Online (Sandbox Code Playgroud)
print0 / 选项 -0 允许文件名字符串包含特殊字符(如空格)的情况。