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

如何使用sed或grep从日志文件中提取日期与Processing字段后内容

解决方案

你可以直接用sed单步完成筛选+字段提取,不需要多次grep拼接,调整后的代码如下:

#!/bin/bash
sed -n '/Processing:/s/^\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\),.*Processing: \(.*\)$/\1 \2/p' ./logs/*.log

命令说明

  • -n:关闭sed默认输出,仅输出匹配规则的行
  • /Processing:/:仅处理包含Processing:的日志行,替代你之前的grep Processing:筛选逻辑
  • 替换规则s/匹配模式/替换结果/p的逻辑:
    • 第一捕获组\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\):匹配行首到秒级的日期时间,自动忽略后面的逗号和毫秒字段
    • 中间段,.*Processing: :匹配毫秒逗号后到Processing:为止的所有中间内容,这部分会被直接丢弃
    • 第二捕获组\(.*\):匹配Processing:之后的所有内容
    • 替换为\1 \2:将两个捕获组的内容用空格拼接后输出
    • 末尾的p:打印替换后的结果

如果你更习惯用grep+sed拆分实现,也可以用下面的写法,逻辑更直观:

#!/bin/bash
grep 'Processing:' ./logs/*.log | sed 's/^\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\),.*Processing: /\1 /'

两种写法输出效果完全一致,都可以得到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:07