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