【问题标题】:sh, Read a lot of log files and grep some text and print all occurrences with file name and line number [duplicate]sh,读取大量日志文件并 grep 一些文本并打印所有出现的文件名和行号 [重复]
【发布时间】:2019-07-06 17:28:41
【问题描述】:

我觉得应该在某个地方回答这个问题,但我找不到好的答案。

我的要求是我需要在 Unix 服务器上搜索过去 3 个月的日志(数千个文件)以查找所有异常。

所以我需要一个应该打印的命令(或脚本),记录文件名、行号、异常第一行,然后将该输出 > 路由到一个新文件。

我想要一些我可以在后台运行并在该过程完成后检查的东西。

然后我可以分析该文件的所有常见异常,并可以专注于最常发生的异常。

感谢您的帮助。

【问题讨论】:

    标签: shell unix command-line command


    【解决方案1】:

    我想这可能对你有帮助,

    要删除旧文件,您可以像下面这样直接使用 find,

    find <PATH> -type f -mtime -90 -exec rm {} \;
    

    请在运行命令前确认文件夹,因为它也有 rm

    现在的诀窍是 find 的 mtime 选项,

    mtime是修改时间,上面的命令会返回最近90天内修改的所有文件,(如果你给+90会返回所有修改超过90天的文件)。

    如果你想 grep 使用 find 并将其通过管道传递给 grep,如下所示,

    find <PATH> -type f -mtime -90 | xargs grep -in <PATTERN> > output.log
    

    【讨论】:

    • 不确定这是否会捕获,文件名,行号也是如此。我需要类似下面的格式以便于分析。 logFileName.log 32 java.lang.Exception: 某些操作失败
    • 如果你想要行号使用 grep 的 -n 选项,这样你将获得文件名和行号(编辑相同的答案)
    • 感谢您的回答
    • 如果解决了您的问题,请点击接受..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2018-08-29
    • 2015-12-18
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多