如何使用正则表达式来消除此堆栈跟踪?

时间:2017-12-08 14:21:39

标签: linux unix grep

我想从我的日志文件中删除堆栈跟踪,这样只显示SQL文本。这在RegExr.com上按照我的意愿运行:

$this->whateverKeyTypeNameIsSetTo

但它不适用于'java.lang((.|\n)*)java:745'

grep -v

有关如何使用grep -v 'java.lang((.|\n)*)java:745'仅显示查询文字的任何建议吗?

grep -v

1 个答案:

答案 0 :(得分:1)

从给定的输出中,您可以看到Java异常遵循非常特定的模式:

  • 包含错误消息的行 java.lang.Throwable
  • 开头
  • stacktrace行,所有以0或更多空格开头,后跟 at

使用grep过滤行,我们可以从手册页中看到,您只需要指定行的一部分来消除它(当使用-v标志忽略行匹配时模式)。

基于此,我们可以构建正则表达式和命令:

grep -v '^java.lang.Throwable\| *at' your_log_file.log
  • ^<expression>表达式必须与行的开头
  • 匹配
  • <expr1>\|<expr2>如果expr1 expr2匹配,则表达式匹配。
  • java.lang.Throwable匹配此确切字符串
  • *at可以在2中分解:
    • *(后跟*的空格)匹配任意数量的空格(0或更多)
    • at匹配此确切字符串

总而言之,它会忽略以java.lang.Throwable或任意数量的空格后跟at开头的所有行。