bash - 如何对 grep 返回的文件内容进行 grep?

标签 bash grep

当我使用 grep error *log 查找带有错误消息的日志文件时,它会返回一个日志文件列表

$grep error *log

Binary file out0080-2011.01.07-12.38.log matches
Binary file out0081-2011.01.07-12.38.log matches
Binary file out0082-2011.01.07-12.38.log matches
Binary file out0083-2011.01.07-12.38.log matches

但是,这些是文本,不是二进制文件。

我不确定为什么这些被认为是二进制的,前几行包含以下非错误消息:

out0134
-catch_rsh /opt/gridengine/default/spool/compute-0-17/active_jobs/327708.1/pe_hostfile
compute-0-17

我想对返回文件的内容 进行grep 以获取错误消息,并返回带有消息的文件名。

我怎样才能 grep 返回文件的内容,而不是这个返回文件列表,就像 grep error *log | 一样。 grep foo?

最佳答案

以下是您可能正在寻找的答案:

grep -l foo $(grep -l error *.log)

-l 告诉 grep 只打印文件名;执行第一个 grep,然后将结果代入下一个 grep 命令。或者,如果您喜欢 xargs:

grep -l error *.log | xargs grep -l foo

它做同样的事情,使用 xargs 以第一个 grep 的结果作为参数调用第二个 grep。

关于bash - 如何对 grep 返回的文件内容进行 grep?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650026/

相关文章:

linux - Bash:为什么对这个字符串进行 egrepping 会成功?

具有返回值和返回字符串的 bash 函数

string - 如何将很长的案例模式拆分成多行?

linux - 在所有 .htaccess 文件中递归地查找一个字符串

python - 您如何通过 grep 浏览存在于许多不同目录中的代码?

linux - 优化大文件的 grep 操作

regex - 使用多行正则表达式获取 grep 上下文

bash - UNIX - 计算两个字段之间每行字符的出现次数并添加包含结果的新列

linux - shell 脚本中 awk -FS 和 awk -f 的区别

bash - 如何使用 Mac 命令行编写多个文件重命名脚本