regex - 解析自定义日志文件

标签 regex powershell powershell-2.0 logfile-analysis

我有一个日志文件(* .log),我希望对其进行分析和查询,如下所示:

行33043:17/07/2016; 13:26:45; GetMasterOrderNo;主订单号为:1117103907 for SoSupplierOrderNo,1117103907
行33048:17/07/2016; 13:26:45; AddAutoPurchHdr;无法保存PurchHdr记录-交货单编号1117103907(订单编号1117103907),供应商SupplierName(51)中已经使用了供应商订单号
行33049:17/07/2016; 13:26:45; ImportASN; ConvertASNFiles:无法导入GRN1171_0000700384_1117103907.xml。无法保存PurchHdr记录-交货单编号1117103907(订单编号1117103907),供应商SupplierName(51)中已经使用了供应商订单号。

我想做的是用标题分割每一行,如下所示:

  • Line,
  • 日期,
  • 时间,
  • 类型,
  • 说明

  • ...这样我就可以对此进行查询。

    最好的方法是什么?

    最佳答案

    您可以使用正则表达式捕获这些字段:

    $content = Get-Content 'your_log_path' -raw
    $regex = 'Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)'
    [regex]::Matches($content, $regex) | ForEach-Object {
        [PsCustomObject]@{
            Line = $_.Groups[1].Value
            Date = $_.Groups[2].Value
            Time = $_.Groups[3].Value
            Type = $_.Groups[4].Value
            Description = $_.Groups[5].Value
        }
    }
    

    输出:
    Line        : 33043
    Date        : 17/07/2016
    Time        : 13:26:45
    Type        : GetMasterOrderNo
    Description : Master Order No is :  1117103907 for SoSupplierOrderNo, 1117103907
    
    Line        : 33048
    Date        : 17/07/2016
    Time        : 13:26:45
    Type        : AddAutoPurchHdr
    Description : Could not save PurchHdr record - The supplier order number has already been used in Delivery Note No.1117103907 (Order No.1117103907), Supplier SupplierName(51)
    
    Line        : 33049
    Date        : 17/07/2016
    Time        : 13:26:45
    Type        : ImportASN
    Description : ConvertASNFiles: Failed to import GRN1171_0000700384_1117103907.xml.  Could not save PurchHdr record - The supplier order number has already been used in Delivery Note 
                  No.1117103907 (Order No.1117103907), Supplier SupplierName(51)
    

    正则表达式:
    Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)
    

    关于regex - 解析自定义日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891618/

    相关文章:

    powershell - CSV文件按col1分组并显示col2的最大值

    sql - 获取 '/' 字符后的字符串

    python - 使用Python获取日期字符串的最佳方法

    mysql - 在powershell中运行cmd,然后返回powershell进行清理

    json - 使用 PowerShell 解析 JSON 数组

    c# - 知道为什么这个简单的程序(创建 powershell session )占用这么多内存(~150 MB)吗?

    powershell - 将参数传递给 Start-Job 脚本 block ?

    关于数字的 JavaScript 正则表达式

    python - 如何在 Python 中调试正则表达式?

    azure - Powershell:将文件从 Azure 文件共享复制到 Blob 存储帐户