美文网首页
使用grep和sed正则表达式从日志中提取信息

使用grep和sed正则表达式从日志中提取信息

作者: 十毛tenmao | 来源:发表于2021-08-04 21:30 被阅读0次

    有时候在做简易日志分析的时候,需要从特定的日志记录中提取特定的信息

    信息提取

    假如有如下错误日志,我们需要提取shopId和orderNo

    {"@message":"[2021-08-04 00:10:00.756][scheduling-1][ERROR][ProfitSharingCrontabManager:235][maibao-transaction][b0dab5d4eaa9e063]: fail to request profit sharing: order[ProfitSharingFinishOrder(id=15668, buyerId=11862667, shopId=406924, subMchid=1547072391, orderNo=MBORDER0080011608448, transactionId=4340800671202019714263, outOrderNo=MBPROFIN00700118042, wxOrderId=null, closeReason=null, finishAmount=null, status=NEW, deleted=0, finishTime=null, createTime=2021-07-28T16:41:28, updateTime=2021-07-28T16:41:28)]\ncom.tencent.maibao.transaction.WxException: 对同笔订单分账频率过高\n\
    
      1. 使用连续grep提取特定日志行
    grep -F "fail to request profit sharing" all.log | grep "ProfitSharingCrontabManager:235" > log.dat
    
      1. 使用sed正则表达式提取数据
    sed 's/.*shopId=\([0-9]*\).*orderNo=\(MBORDER[0-9]*\).*/\1 \2/g' log.dat
    
    • 2'. 使用扩展正则表达式(选项-E)
    sed -E 's/.*shopId=([0-9]+).*orderNo=(MBORDER[0-9]+).*/\1 \2/g' log.dat
    

    正则表达式不同之处

    sed默认正则表达式

    • 不支持\d
    • 不支持+(表示1个或多个)
    • 捕获组的圆括号,需要转义
    • 替换组,使用反斜杠\1,其他地方大部分都是美元符号$1

    sed扩展正则表达式

    • 不支持\d
    • 替换组,使用反斜杠\1,其他地方大部分都是美元符号$1

    相关文章

      网友评论

          本文标题:使用grep和sed正则表达式从日志中提取信息

          本文链接:https://www.haomeiwen.com/subject/sfkpvltx.html