我正在使用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}打一个新行吗?
谢谢!
答案 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