Zgrep和sed与包含减号( - )的行不匹配

时间:2015-01-05 10:34:35

标签: regex linux bash sed grep

我是bash的新手,我正在尝试使用zgrepsed来过滤一些日志,只获取所需的信息。

这是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]

如您所见,第一行未按预期更换。为什么不呢?

1 个答案:

答案 0 :(得分:2)

您告诉sed仅对包含-的行进行操作(不需要反斜杠)。

/-/ s...

参见"地址"在man sed

未处理的行不包含它,因此sed不会更改它。