2015-08-18 12 views
0

我有一个文件,在如下面的例子很多日志行的,我想要做的基本上是每件的处理信息后添加CR。我想我会使用下面的SED /正则表达式益智

sed -rn 's/([0-9]+) \(([a-z._0-9]+)\) ([0-9]+) ([0-9]+)/ \2,\1,\3,\4 \n/gp' < file 

这部分工作做到这一点与SED,但是我还是从日志中,出现在每行的末尾Total: 3266 #015。我没有想到,因为它在正则表达式中不匹配。

我测试过可用的网站正则表达式,他们总是看起来不错,并找到了我期望的,它只是当我与SED结合我不太得到的结果我期待。

任何帮助或建议,将最赞赏,

感谢

安迪

这是统计单行

1 (init) 3686400 123 148 (klogd) 3690496 116 16364 (memlogger.sh) 3686400 144 17 0 225 (dropbear) 1847296 113 242 (mini_httpd) 2686976 167 281 (snmpd) 4812800 231 283 (logmuxd) 2514944 262 284 (watchdog) 3551232 82 285 (controld) 5259264 610 287 (setupd) 5120000 436 289 (checkpoold) 3424256 129 296 (trap_sender_d) 3457024 165 298 (watch) 3686400 114 299 (processwatchdog) 3420160 119 314 (timerd) 3637248 219 315 (init) 3686400 116 16365 (cat) 3694592 120 Total: 3266 #015 
+7

你能不能说明问题了简短的例子吗?在任何情况下 - 编辑您的问题,以显示与您发布的样本输入相关的预期输出。 –

+0

请看看[如何创建一个最小的,完整的,并且可验证的示例](http://stackoverflow.com/help/mcve)。 – Cyrus

回答

1

只是删除了 “总计:”

sed -rn 's/ +Total:.*//; 
      s/([0-9]+) +\(([a-z._0-9]+)\) +([0-9]+) +([0-9]+)/ \2,\1,\3,\4\n/gp' 

您也可以匹配“总计:”任选:

sed -rn 's/([0-9]+) +\(([a-z._0-9]+)\) +([0-9]+) +([0-9]+)(*Total:.*)?/ \2,\1,\3,\4\n/gp' 
#               ------------^ 
+0

我认为首先删除'Total:。*#015 $'可能是一个更简单的解决方案(不需要重复匹配它)。 –

+0

@EtanReisner:对,已更新。谢谢。 – choroba

+0

谢谢,我明白你的意思,我想我的问题主要是从为什么是正则表达式首先打印总,因为它并不符合搜索条件朵朵我的理解它,因此我预计它在被丢弃替换。我想我的理解是错误的 –