当我使用以下命令查找带有错误消息的日志文件时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 的结果作为参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)