在找到Pattern之后从文件中读取特定行

时间:2013-12-04 11:37:00

标签: sed

我对shell编程很新,所以请忍受我的无知,我想写一个sh脚本我想做的事情

1)。找到文件中的模式<完成>

2)。找到模式后,读取紧跟在模式之后的所有行,以“at”开头。

摘自我的日志文件

SQLError.dispatchException(SQLError.java:299)
at blah.blah.blah.blah(blah.java)
at blah.blah.blah.blah(blah.java)
at blah.blah.blah.blah(blah.java)
at blah.blah.blah.blah(blah.java)
Caused by: java.sql.SQLException

在这里,我能够找到模式SQLError.dispatchException,但不知道如何阅读以at开头的所有行,并检查Caused by是否在行开始后at出现1}}。

2 个答案:

答案 0 :(得分:0)

有人这样吗?

awk '/SQLError.dispatchException/ {f=1} f && /^at/' file
at blah.blah.blah.blah(blah.java)
at blah.blah.blah.blah(blah.java)
at blah.blah.blah.blah(blah.java)
at blah.blah.blah.blah(blah.java)

防止打印以at开头的其他部分

awk '/SQLError.dispatchException/ {f=1} f && /^at/; !/^at/ {f=1}' file

答案 1 :(得分:0)

sed -n '/SQLError.dispatchException/ {
:at
   N;s/\nat[^[:cntrl:]]*$/&/
   t at
   s/\n[^[:cntrl:]]*$//p;}' YourFile