当我查找带有错误消息的日志文件时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
Run Code Online (Sandbox Code Playgroud)
但是,这些是文本,而不是二进制文件.
我不确定为什么这些被认为是二进制,前几行包含以下非错误消息:
out0134
-catch_rsh /opt/gridengine/default/spool/compute-0-17/active_jobs/327708.1/pe_hostfile
compute-0-17
Run Code Online (Sandbox Code Playgroud)
我想grep 返回文件的内容以获取错误消息,并返回带有消息的文件的名称.
我如何grep返回的文件的内容,而不是这个返回的文件列表,如grep error *log | grep foo?
以下是您可能正在寻找的答案:
grep -l foo $(grep -l error *.log)
Run Code Online (Sandbox Code Playgroud)
-l告诉grep只打印文件名; 执行第一个grep,然后将结果替换为下一个grep命令.或者,如果你喜欢xargs:
grep -l error *.log | xargs grep -l foo
Run Code Online (Sandbox Code Playgroud)
它做了同样的事情,使用xargs以第一个grep的结果作为参数调用第二个grep.
-a, -
text处理二进制文件,就好像它是文本一样; 这相当于--binary-files = text选项.
grep -a "some error message" *.log
顺便说一句,这是grep如何从文本文件中确定二进制文件
如果文件的前几个字节表明该文件包含二进制数据,则假定该文件的类型为TYPE.默认情况下,TYPE是二进制的......
如果您只想要一个包含单词foo的文件名列表,该行也包含错误,那么您可以执行以下一个或另一个:
grep -la "error.*foo" *.log < - 假设foo在错误之后出现
| 归档时间: |
|
| 查看次数: |
5769 次 |
| 最近记录: |