我可以在一行中使用 find 和 grep 吗?

Jos*_*Jos 7 grep find

我有一个基于事件的目录结构。

在这些事件中,我有一种类型的文件包含或不包含我需要搜索的模式。我想将积极的结果存储在一个单独的文件中。

我的第一种方法是:

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


mdp*_*dpc 5

另一种有效的方法是:

 find /directory/containing/files -type f -print0 | xargs -0 grep "test to search"
Run Code Online (Sandbox Code Playgroud)

print0 / 选项 -0 允许文件名字符串包含特殊字符(如空格)的情况。