Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配整个Java异常堆栈跟踪的正则表达式_Java_Regex_Logging_Grep - Fatal编程技术网

匹配整个Java异常堆栈跟踪的正则表达式

匹配整个Java异常堆栈跟踪的正则表达式,java,regex,logging,grep,Java,Regex,Logging,Grep,给定java应用程序的标准日志文件: INFO [main] (AutoMain.java:133) - querying data 1 DEBUG [main] (AutoMain.java:142) - data 1 count: 23180 INFO [main] (AutoMain.java:151) - querying data 2 ERROR [main] (AutoMain.java:607) - Failure in auto java.net.ConnectExcepti

给定java应用程序的标准日志文件:

 INFO [main] (AutoMain.java:133) - querying data 1
DEBUG [main] (AutoMain.java:142) - data 1 count: 23180
 INFO [main] (AutoMain.java:151) - querying data 2
ERROR [main] (AutoMain.java:607) - Failure in auto
java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
    at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
    at com.myCompany.client.queryData(Client.java:83)
    at com.myCompany.client.queryData(Client.java:91)
    at com.myCompany.queryOptData(InstantAutomaton.java:153)
    at com.myCompany.AutoMain.main(InstantAutomaton.java:426)
但我也想要所有后续的“at”语句。因此,结果匹配字符串应为:

java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
    at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
    at com.myCompany.client.queryData(Client.java:83)
    at com.myCompany.client.queryData(Client.java:91)
    at com.myCompany.queryOptData(InstantAutomaton.java:153)
    at com.myCompany.AutoMain.main(InstantAutomaton.java:426)
java.net.ConnectException:连接被拒绝(连接被拒绝)
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于java.net.Socket.connect(Socket.java:538)
位于java.net.Socket。(Socket.java:434)
位于java.net.Socket。(Socket.java:211)
在com.myCompany.client.clientofactory$1。(clientofactory.java:17)
位于com.myCompany.client.clientofactory.lambda$clientofactoryfromsocket$0(clientofactory.java:15)
位于com.myCompany.client.queryData(client.java:83)
位于com.myCompany.client.queryData(client.java:91)
在com.myCompany.queryOptData(instantautomon.java:153)
在com.myCompany.AutoMain.main(InstantAutomaton.java:426)

提前感谢您的考虑和回复。

使用Java+8,您可以:

(?m)^.*?Exception.*(?:\R+^\s*at .*)+

但是,在grep中,由于默认情况下它一次处理一行,因此可以将行与
异常
或以
开头的行
匹配:

grep -P '(?m)^(?:\S+?Exception|\h+at )' file

当您可以在任何UNIX机器上的任何shell中使用任何awk轻松地执行此操作时,请不要使用复杂的、不可移植的regexp:

$ awk '/^[^ ]/{f=0} /Exception/{f=1} f' file
java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
    at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
    at com.myCompany.client.queryData(Client.java:83)
    at com.myCompany.client.queryData(Client.java:91)
    at com.myCompany.queryOptData(InstantAutomaton.java:153)
    at com.myCompany.AutoMain.main(InstantAutomaton.java:426)
$awk'/^[^]/{f=0}/Exception/{f=1}f'文件
java.net.ConnectException:拒绝连接(拒绝连接)
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于java.net.Socket.connect(Socket.java:538)
位于java.net.Socket。(Socket.java:434)
位于java.net.Socket。(Socket.java:211)
在com.myCompany.client.clientofactory$1。(clientofactory.java:17)
位于com.myCompany.client.clientofactory.lambda$clientofactoryfromsocket$0(clientofactory.java:15)
位于com.myCompany.client.queryData(client.java:83)
位于com.myCompany.client.queryData(client.java:91)
在com.myCompany.queryOptData(instantautomon.java:153)
在com.myCompany.AutoMain.main(InstantAutomaton.java:426)

尝试
(?m^.*?异常。*(?:[\r\n]+^\s*at.*)+
。请看这里的live demo@revo Thank you,但您给出的表达式与grep不起作用。您知道grep的语法是否与live demo有所不同吗?不过,有些异常名称中可能不包含异常。如果是这样的话,
grep-v'^[A-Z]{2}'
(char类中有一个空格)可能值得一试。(它假设日志总是1行长,并且命名约定得到遵守,因此只有不以2个空格或大写开头的行是异常及其堆栈跟踪)使用GNU
grep
您可以执行
grep-P'(?m)^(?:::\S+?Exception |\h+at)
@revo文件,再次感谢。请随意回答,我会投票给你…这不包括由堆栈跟踪的部分引起的
。而且也是一次性的,所以
(异常|错误)
可能更可取。
$ awk '/^[^ ]/{f=0} /Exception/{f=1} f' file
java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
    at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
    at com.myCompany.client.queryData(Client.java:83)
    at com.myCompany.client.queryData(Client.java:91)
    at com.myCompany.queryOptData(InstantAutomaton.java:153)
    at com.myCompany.AutoMain.main(InstantAutomaton.java:426)