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

Zgrep and sed do not match lines that contain minus (-) sign

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

如您所见,第一行没有按预期替换。为什么不呢?

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

/-/ s...

参见 man sed 中的 "Addresses"。

未处理的行不包含它,所以sed不改变它。