Grep 返回整个文件内容

Grep 返回整个文件内容

我想递归搜索某个单词,比如 MyWord,但我想打印包含 MyWord 的所有文件的全部内容。我该怎么做?

事实证明,我特别关心二进制 sqlite 文件,既对它们进行 grep,又将结果读取为文本文件,而不是二进制文件。

答案1

您还可以find使用grep

find . -type f -exec grep -wq 'MyWord' {} \; -exec cat {} >> /path/to/outfile \;

这将找到包含单词“MyWord” 递归地一旦找到第一个匹配项,就会将整个文件内容重定向到一个新文件。

答案2

我会用:

sudo grep -rIlZ --exclude=${HISTFILE##*/} --exclude-dir={boot,dev,lib,media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e 'MyWord' | xargs -0 cat > MyOutputFile
  • sudo如果未在系统目录中查找,则删除。
  • 更改(根目录)'/'到当前目录'.'或特定目录,即'/home/me/stuff'
  • 删除mnt以包含 下安装的 Windows 文件mnt
  • 删除lib以包含 Linux 源文件
  • 排除提高速度所需的目录。请参阅:在所有文件中查找字符串需要很长时间
  • --exclude=${HISTFILE##*/}MyWord如果您第二次运行该命令,或者之前在其他命令中使用过该搜索字符串,则需要执行此操作。这可以防止包含 5 千条历史记录行 ($HISTFILE)。
  • -r递归,I跳过二进制文件,在每个文件名后输出一个零字节,lZ而不是通常的换行符。 空(零字节)终止符是必需的perl -0sort -z用于(打印出)文件内容。xargscat
  • > MyOutputFile将输出发送到文件而不是屏幕。关闭此选项则输出到屏幕。

笔记:输出中缺少文件名,仅列出文件内容。

答案3

如果您的文件夹不是很大,请尝试:

grep -rz '.*MyWord.*'  myfolder > output

如果需要的话添加-a

相关内容