使用SED解析包含可能的行更改的日志文件

时间:2012-10-23 02:41:22

标签: parsing logging sed

我正在使用PHP打印日志文件,遗憾的是,包含

0000000001 foo.php:123 This is a message\n
0000000002 foo.php:124 This is a message, line 1\n
line 2\n
line 3\n

使用sed,

s/^\([0-9]{10}\) \(^[\s]*\) \(.*\)$/

我可以得到上面第1行和第2行,但不能得到3和4,因为它们与模式不匹配;我想有条件地删除换行符,例如在上面的日志中,合并行2..4。

我可以让最后一个(。*)匹配“直到我用开头^ [0-9] {10}打一个新行吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

使用awk,您可以像这样格式化文件,其中所有不以数字开头的行都被合并。您可以将sed应用于此:

$ awk '/^[0-9]/{if (x)print x;x="";}{x=x $0;}END{print x}' file
0000000001 foo.php:123 This is a message\n
0000000002 foo.php:124 This is a message, line 1\nline 2\nline 3\n

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed ':a;$!N;/\n[0-9]\{10\}/!s/\n//;ta;P;D' file