【问题标题】:How to search for multiple strings in a log file using less command in unix?如何在 unix 中使用 less 命令在日志文件中搜索多个字符串?
【发布时间】:2017-06-13 13:38:55
【问题描述】:

我想在日志文件中搜索多个字符串。只有在所有搜索字符串都在同一行中的情况下,才应突出显示那些条目。我可以为此使用更少的命令或任何其他更好的选择吗?我的日志文件大小通常为几 GB。

【问题讨论】:

    标签: linux parsing unix less-unix


    【解决方案1】:

    如果要搜索string1string2,请使用/string1|string2。 你说你想要找到两者的行:

    /string1.*string2
    

    当您不知道行中的顺序并想查看完整的行时,您将需要

    /.*string1.*string2.*|.*string2.*string1.*
    

    或者更短

    /.*(string1.*string2|string2.*string1).*
    

    组合更多没有固定顺序的单词会变得一团糟,先用awk过滤就好了。

    【讨论】:

    • 谢谢!它对我有用。我个人更喜欢 awk,因为“如果文件打开,我可以快速更改搜索字符串,从当前位置向前/向后搜索。”能够以更少的方式搜索多个字符串是一个额外的好处。
    • 你更喜欢它,因为这个答案只处理 两个 搜索模式。当您增加模式的数量或模式更复杂时,这会变得非常复杂。 三个模式几乎是不可能输入的。
    • @hek2mgl 同意,在我的情况下,搜索字符串的顺序是已知的,我最多只有 2 或 3 个搜索字符串,所以它是首选。否则,就像你建议的那样,少用 awk 是要走的路。
    【解决方案2】:

    使用awk过滤文件,less查看过滤结果:

    awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
    

    如果文件很大,您可能希望使用stdbuf 来查看前面less 中的结果:

    stdbuf awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-11
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2023-02-15
      • 2011-02-04
      • 1970-01-01
      相关资源
      最近更新 更多