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

Parsing 使用SED分析包含可能的行更改的日志文件,parsing,logging,sed,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..

我正在用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}开头的新行吗?”

谢谢


 

使用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
这可能适用于您(GNU-sed):

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