【问题标题】:Parsing a log file containing possible line changes with SED使用 SED 解析包含可能的行更改的日志文件
【发布时间】:2012-10-23 02:41:21
【问题描述】:

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

谢谢!

 

【问题讨论】:

    标签: parsing logging sed


    【解决方案1】:

    使用 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 2020-09-13
        • 1970-01-01
        • 2011-12-27
        • 2011-11-04
        • 1970-01-01
        • 2017-02-12
        • 2013-01-30
        • 1970-01-01
        相关资源
        最近更新 更多