因此,当我使用要处理的特定日志集时,仅cat
使用拉开文件然后使用grep
来获取匹配行就可以了。它需要一种将线与模式匹配的方法,但只需要在匹配后返回该线的一部分。比赛之前和之后的部分将不断变化。我使用过sed
或awk
,但无法弄清楚如何过滤线以删除比赛之前的部分,或者仅在比赛之后返回部分,这两种方法都可以使用。这是我需要过滤的一行示例:
2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
我需要的部分是“停顿”之后的所有内容。
其背后的背景是,我可以找出停顿的频率:
cat messages | grep stalled | wc -l
我需要做的是找出某个节点已停顿了多少次(由“停顿”后每个冒号之前的部分指示。如果我只是为此而grep(即20 :),它可能会返回软失败的行,但是我只需要过滤停顿的部分,这样我就可以从停顿的那些节点中为特定节点进行grep。
出于所有目的和目的,这是一个具有标准GNU核心utils的freebsd系统,但是我无法安装任何额外的辅助工具。
sed
解决方案,不要特别对待空格。