我是bash的新手,我正在尝试使用zgrep
和sed
来过滤一些日志,只获取所需的信息。
这是myfile.log.gz中的日志
2014/11/22 00:53:15.310 @ 5 @ mex.MIP.utils.CATUtils @ About to start ASYNC Track to CAT of KPI Unsubscription for [msisdn=+528341114903,trackExecutionKey=20140713U5cN61405274548493MEX*5803*40]
2014/11/22 00:53:57.725 @ 5 @ mex.MIP.utils.CATUtils @ About to start ASYNC Track to CAT of KPI Unsubscription for [msisdn=+522281344058,trackExecutionKey=20140904fG6W11409859320970MEX*5925*-1]
这是我正在使用的zgrep命令。
zgrep "ASYNC.*Unsubscription.*track" myfile.log.gz | sed -e '/\-/s/@.*5.*CATUtils.*trackExecutionKey=//g' | less
以下是预期输出
2014/11/22 00:53:15.310 20140713U5cN61405274548493MEX*5803*40]
2014/11/22 00:53:57.725 20140904fG6W11409859320970MEX*5925*-1]
这是实际我得到
2014/11/22 00:53:15.310 @ 5 @ mex.MIP.utils.CATUtils @ About to start ASYNC Track to CAT of KPI Unsubscription for [msisdn=+528341114903,trackExecutionKey=20140713U5cN61405274548493MEX*5803*40]
2014/11/22 00:53:57.725 20140904fG6W11409859320970MEX*5925*-1]
如您所见,第一行未按预期更换。为什么不呢?
答案 0 :(得分:2)
您告诉sed
仅对包含-
的行进行操作(不需要反斜杠)。
/-/ s...
参见"地址"在man sed
。
未处理的行不包含它,因此sed不会更改它。