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打印所有文件内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章