我试图解析这一行:
2017-09-18T11:00:03,059 INFO [01272636]:sasdemo - 从服务器端口8561接受可信SAS的新客户端连接(198880) 同行用户sasdemo。
这样的事情:
2017-09-18T11:00:03,sasdemo,LOGIN,SUCCESS,成功登录
我对使用sed很新,但如果我没错,我需要在搜索中存储所有字符,直到第一个逗号[^,]*
并在其中使用它替换为\1
,但如何检索用户sasdemo
?
答案 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\)
并在您要查找的每个字符串之间使用.
。