【发布时间】:2013-09-17 07:39:16
【问题描述】:
我有一个这样的电子邮件日志文件:
2013-09-11 12:02:08 INFO: ------------------------------
2013-09-11 12:02:08 INFO: Javamail session sending email
2013-09-11 12:02:08 INFO: Session properties:
2013-09-11 12:02:08 INFO: com.hof.email.starttime=20130911120208
2013-09-11 12:02:08 INFO: mail.smtp.auth=true
2013-09-11 12:02:08 INFO: mail.smtp.connectiontimeout=60000
2013-09-11 12:02:08 INFO: mail.smtp.host=mailserver
2013-09-11 12:02:08 INFO: mail.smtp.port=25
2013-09-11 12:02:08 INFO: mail.smtp.timeout=60000
2013-09-11 12:02:08 INFO: mail.transport.protocol=smtp
2013-09-11 12:02:08 INFO: From: Support
2013-09-11 12:02:08 INFO: To: Customer
2013-09-11 12:02:08 INFO: Subject: Your Report Data
2013-09-11 12:02:08 INFO: Message ID: <id>
2013-09-11 12:02:09 INFO: Email sent successfully
2013-09-11 12:02:09 INFO: Javamail session ended
2013-09-11 12:02:09 INFO: ------------------------------
如果电子邮件主题与特定字符串匹配,我需要做的是打印整条记录。
也就是说,我想我想做的是,当 Subject = 'Your Report Data' 时,然后打印主题匹配中第 n-1 次出现的 '------------------------------' 和第一次出现的 '------------------------------' 之间的所有行.
【问题讨论】:
-
如果行与行之间的部分始终相同,您可以使用
grep与-A和-B。 -
主题总是块的第 12 行吗?
-
是的,每个条目的日志条目结构始终相同。
-
正如@mnagel 所指出的,如果格式是固定的(
----...--行与Subject:行的距离始终相同),那么“俗气”的做法是:grep -A 4 -B 12 "INFO:.*Subject: " log.txt在这种情况下。 -
谢谢你,@mnagel,这对我来说很好用。