使用 grep 仅显示目录(作为参数给出)或其子目录中具有 .txt 扩展名的文件的内容

使用 grep 仅显示目录(作为参数给出)或其子目录中具有 .txt 扩展名的文件的内容

我设法使用 find 来做到这一点:

find 'directory' -type f -name "*.txt" -print0 | xargs -0 cat 

    

我不知道如何使用 grep 来做到这一点。尝试了数千次。

答案1

至少使用 GNU grep (这可能是您所拥有的实现,因为您标记了问题Linux),您可以使用该--include 选项来限制 glob 搜索的文件。将其与空模式结合起来进行模拟cat

grep -hr --include='*.txt' '' directory

-h关闭匹配结果的文件名默认前缀。

答案2

要显示文件的内容grep,您可以搜索空正则表达式grep "" file.txt或“行开头”正则表达式grep ^ file.txt

我的理解是,目录作为参数给出。如果是这样的话:

grep ^ $(find $1 -name '*.txt')

或者

find $1 -name '*.txt' -exec grep ^ {} \;

这两种解决方案的问题是它们显示的内容全部文本文件,而不是“Afile”作为问题的需要。如果找到多个文本文件,第一个解决方案还会打印文本文件的名称。最后,如果找到太多文本文件,我的第一个解决方案就会中断;xargs在这种情况下有帮助。

相关内容