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

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 に答える
0

これはうまくいくかもしれません(GNU sed):

sed ':a;$!N;/\n[0-9]\{10\}/!s/\n//;ta;P;D' file
于 2012-10-23T06:45:14.690 に答える