You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理电话日志:保留首组括号内容,删除第二组括号及内容

保留时间戳并删除通话ID的sed解决方案

先看看你处理后的日志示例:

[2019-07-18 14:12:57] [1563477176.20446] '30' <redacted> at 162+
[2019-07-18 14:14:08] [1563477248.20463] '30' <redacted> at 162+
[2019-07-18 14:19:20] [1563477559.20468] '30' <redacted> at 162+
[2019-07-18 23:30:41] [1563510638.21273] '30' <redacted> at 162+
[2019-07-18 23:31:21] [1563510678.21276] '30' <redacted> at 162+

你想要保留第一组括号里的时间戳,删掉第二组括号的通话ID,之前的命令会删掉所有括号内容确实不行。其实不用拆分每行处理,用sed的分组捕获就能精准实现需求,给你两个靠谱的方案:

方案一:利用时间戳括号固定长度(精准匹配)

既然第一组时间戳的括号长度是固定的,我们可以直接捕获这部分内容,只替换后面的第二组括号:

sed -E 's/^(\[[^]]+\]) \[[^]]+\]/\1/'

命令解释:

  • ^(\[[^]]+\]):匹配行首的第一组括号内容,用括号把它标记为捕获组\1
  • \[[^]]+\]:匹配第一组括号后面的空格,加上第二组括号及其内部的所有内容
  • 替换成\1,也就是只保留我们需要的时间戳,删掉第二组括号部分

处理后的结果就是你要的样子:

[2019-07-18 14:12:57] '30' <redacted> at 162+
[2019-07-18 14:14:08] '30' <redacted> at 162+
[2019-07-18 14:19:20] '30' <redacted> at 162+
[2019-07-18 23:30:41] '30' <redacted> at 162+
[2019-07-18 23:31:21] '30' <redacted> at 162+

方案二:通用匹配(不依赖长度)

如果担心以后时间戳格式变化或者空格数调整,可以用更灵活的写法,适配任意数量的空格:

sed -E 's/(\[[^]]+\])\s*\[[^]]+\]/\1/'

这里的\s*会匹配第一组和第二组括号之间的任意空格(包括0个),兼容性更强。

这两个命令都可以直接放到你的bash管道里,不用拆分处理,完全符合管道多步命令的场景。

内容的提问来源于stack exchange,提问作者InterLinked

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:27:58