使用sed解析日志文件

时间:2017-09-18 12:13:04

标签: unix sed

我试图解析这一行:

  

2017-09-18T11:00:03,059 INFO [01272636]:sasdemo - 从服务器端口8561接受可信SAS的新客户端连接(198880)   同行用户sasdemo。

这样的事情:

  

2017-09-18T11:00:03,sasdemo,LOGIN,SUCCESS,成功登录

我对使用sed很新,但如果我没错,我需要在搜索中存储所有字符,直到第一个逗号[^,]*并在其中使用它替换为\1,但如何检索用户sasdemo

3 个答案:

答案 0 :(得分:1)

以下是您想要的:

sed -n '/New client connection ([0-9]*) accepted/{
            s/,.* peer user \(.*\)\./,\1,LOGIN,SUCCESS,Successful Login/;p
       }'
  • -n表示"不打印每一行",命令p仅用于打印选定的行
  • 该命令以"地址"开头,即括号中的代码块仅在输入行包含"新客户端连接"时才会运行。等
  • 分组(反斜杠括号)用于提取用户名,\1是指第一个这样的组

答案 1 :(得分:1)

使用 awk

awk -F',|[[:space:]]*|\\.' '/New c.* accepted/{ 
        print $1,$(NF-1),"LOGIN,SUCCESS,Successful Login" 
    }' OFS=',' logfile

输出(一行):

2017-09-18T11:00:03,sasdemo,LOGIN,SUCCESS,Successful Login

答案 2 :(得分:0)

你看过sed的手册页吗?它将为您提供所有命令选项。

您可以使用sed中的\1 \2 \3选项来解析多个字符串 \(\)标识字符串:\(sasdemo\)并在您要查找的每个字符串之间使用.