Grep打印所有文件内容

时间:2018-03-20 17:10:06

标签: bash grep

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

2 个答案:

答案 0 :(得分:1)

简单grep + cat组合:

grep 'pattern' file && cat file

答案 1 :(得分:1)

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

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

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

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

find 'directory' -type f -print0 | xargs -0 cat

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

find 'directory' -type f \
     -exec grep -q 'regex1' {} \; -and \
     -exec grep -q 'regex2' {} \;  -print0 |
xargs -0 cat

换行符只是为了提高可读性。如果没有\,您可以将所有内容写入一行 请注意-q的{​​{1}}。该选项会阻止grep的输出。 grep的退出状态会告诉grep是否要列出文件。