SED / RegEx拼图

时间:2015-08-18 13:45:04

标签: regex bash awk sed

我有一个文件,下面的例子中有很多日志行,我想要做的是基本上在每个过程信息之后添加一个CR。我想我会用SED使用下面的

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

这部分有效,但我仍然从日志中获取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

1 个答案:

答案 0 :(得分: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'
#                                                          ------------^