1

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

谢谢!

 

4

2 回答 2

0

这可能对您有用(GNU sed):

sed ':a;$!N;/\n[0-9]\{10\}/!s/\n//;ta;P;D' file
于 2012-10-23T06:45:14.690 回答
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
于 2012-10-23T03:03:09.127 回答