Grep打印所有文件内容[重复]

Posted

技术标签:

【中文标题】Grep打印所有文件内容[重复]【英文标题】:Grep to Print all file content [duplicate] 【发布时间】:2018-08-29 15:02:28 【问题描述】:

如何修改 grep 以便在其条目与 grep 模式匹配时打印完整文件,而不是仅打印匹配行? 我尝试使用(比如说)grep -C2 打印上面的两行和下面的 2 行,但这并不总是有效。行数不固定.. 我不只是搜索单个文件,而是搜索整个目录,其中一些文件可能包含给定的模式,我希望这些文件被完全打印。 我还在 grep 结果中使用了 grep,但没有打印出第一个 grep 输出。

【问题讨论】:

【参考方案1】:

使用grep-l选项列出具有匹配内容的文件的路径,然后使用cat打印这些文件的内容。

grep -lR 'regex' 'directory' | xargs -d '\n' cat 

上面的命令不能处理带有换行符的文件名。 要克服 文件名带有换行符 的问题并允许更复杂的检查,您可以使用 find 命令。

以下命令打印directory中所有常规文件的内容。

find 'directory' -type f -exec cat  +

要仅打印内容与正则表达式regex1 regex2 匹配的文件的内容,请使用

find 'directory' -type f \
     -exec grep -q 'regex1'  \; -and \
     -exec grep -q 'regex2'  \; \
     -exec cat  +

换行符只是为了更好的可读性。如果没有\,您可以将所有内容写入一行。 请注意 -q 对应于 grep。该选项会抑制grep 的输出。 grep 的退出状态将告诉 find 是否列出文件。

【讨论】:

你能修改这个,以便我可以在第一个匹配的整个文件上使用另一个 grep,然后打印与两个 grep 匹配的整个文件 @AniketGupta 不是那么容易,但有一个替代方案(见编辑的答案)。【参考方案2】:

简单的grep + cat 组合:

grep 'pattern' file && cat file

【讨论】:

但我在目录中递归搜索 @AniketGupta 那你应该这么说。请编辑您的问题以使事情更清楚。

以上是关于Grep打印所有文件内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章

grep结合正则过滤

grep命令 查找包含某内容的文件

Linux的常用命令

如何通过使用 grep 扫描整个目录来在文件内容中查找具有特定字符串的文件 [重复]

grep的简单理解

linux怎么打印文件的路径和文件的内容