【发布时间】:2019-09-28 17:17:59
【问题描述】:
新手使用 awk 并尝试编写一个 bash 脚本来使用它来打印日志文件中两个模式之间的行,而对于我来说,我无法让它工作。
我想我需要转义一些字符。
这是我试图从中获取行的日志部分的示例:
Processing... AP710 (/var/opt/testsys/rptprint/AP710)
sidjosajdois
sokds3488sds
doskdoskdoskdo
sodk229929
sending entire report to Job Mgr (spool) for user
我想要“处理中...”行(第一个模式)和“发送”行(第二个模式)之间的四行,并且日志的只有一个部分具有上述部分和第一个部分图案线和第二条图案线。
我已经尝试使用 awk 和以下命令,使用第一个模式的一部分,并根据需要转义“/”字符:
awk '/\/var\/opt\/testsys\/rptprint\/AP710/{flag=1;next}/sending entire report to Job Mgr/{flag=0}flag' log
但它给了我日志的其他一些不同部分,这些部分也恰好具有路径“/var/opt/testsys/rptprint/AP710”,所以我尝试将其更改为包含更多行(第一种模式)通过添加“处理中...”,它不会返回任何内容...
awk '/Processing\.\.\. AP710 \(\/var\/opt\/testsys\/rptprint\/AP710/{flag=1;next}/sending entire report to Job Mgr/{flag=0}flag' log
有人可以提供一些有关 awk 的指导,以便我了解这两种模式之间的界限吗?花了几个小时后,我有点疯狂地试图弄清楚,我认为我是 awk 的新手导致我错过了一些明显的东西。
干杯。
【问题讨论】:
-
get lines between the 2 patterns 在这里解决:stackoverflow.com/questions/38972736/… 如果您对数据有问题,请发布更好的示例,因为该示例不会显示问题。