sublime中匹配替换时间戳需用捕获组精准提取,如apache日志15/mar/2024:14:22:05→2024-03-15 14:22:05,但月份缩写需额外映射;删调试日志行应使用^.?(debug|debug|logger.debug).?\s*$匹配整行并替换为空,避免破坏结构。

匹配时间戳并替换为标准格式
日志里常见 2024-03-15 14:22:05.123 或 15/Mar/2024:14:22:05 +0800 这类不统一的时间,Sublime 的正则替换能快速对齐。关键是捕获组要写准,避免跨行或误吞空格。
比如把 Apache 日志中的 15/Mar/2024:14:22:05 改成 2024-03-15 14:22:05:
Find: (\d{2})/(\w{3})/(\d{4}):(\d{2}):(\d{2}):(\d{2})\b
Replace: $3-$2-$1 $4:$5:$6
但这里有个坑:$2 是月份缩写(如 Mar),不能直接当数字用。得先建好映射表,或改用「Find in Files」配合多步替换。更稳妥的做法是用 Python 正则插件(如 Sublime's sublime.Regex)预处理,但纯内置功能下,建议分两轮:先替换成带占位符的格式(如 YYYY-MM-DD),再全局查替换月份名。
删除调试日志行(含特定关键词)
想批量删掉所有包含 DEBUG 或 logger.debug 的整行,不能只删关键词,否则会留空行或破坏结构。
- 用
^.*?(DEBUG|debug|logger\.debug).*?$匹配整行(记得勾选. matches newline吗?别勾——它会让^和$失效;正确做法是关掉这个选项,确保只匹配单行) - 替换留空,但注意结尾是否有空格或制表符:实际日志常带
\t或尾部空格,建议 Find 表达式末尾加\s*$ - 如果日志是 JSON 格式嵌套的(比如
{"level":"debug",...}),别硬删行——可能破坏 JSON 结构,应改用 JSONPath 工具或写小脚本
提取请求路径并生成统计列表
从 Nginx 或应用日志中抽 /api/v1/users、/static/css/app.css 这类路径,用于后续分析。Sublime 不是分析工具,但能帮你“准备好数据”。
典型场景:日志形如 127.0.0.1 - - [15/Mar/2024:14:22:05] "GET /api/v1/users?id=123 HTTP/1.1" 200 1234
推荐正则:
Find: "GET\s+(/[^"\s]+) Replace: $1\n
注意事项:
-
/[^"\s]+比/\S+更安全,排除引号和空格干扰 - 如果路径含编码字符(如
%20),替换后保留原样,别自动 decode——Sublime 不处理 URL 解码 - 执行 Replace All 前,先用
Find All看是否命中预期行数;太多或太少,说明正则太宽或太窄
替换敏感字段但保留掩码长度
脱敏需求很常见,比如把 token=abc123xyz 替成 token=***,但又希望星号个数对应原长(abc123xyz 是 9 位 → *********)。Sublime 原生不支持动态长度替换,这点必须清楚。
可行方案只有两个:
- 用固定长度掩码(如统一 8 个
*),表达式:token=[^\s&"]+→token=******** - 导出匹配结果到文本,用 Python 脚本做动态替换再粘贴回来(一行命令就能搞定:
python3 -c "import re; s=open('log').read(); print(re.sub(r'token=([^&\s\"]+)', lambda m: f'token={'*' * len(m.group(1))}', s))")
别在 Sublime 里折腾“用 JavaScript 插件调正则回调”——太重,也容易出错。简单任务就用固定掩码,真要保长度,交给 shell 或 Python 更稳。
真正麻烦的是嵌套结构里的敏感字段,比如 JSON 日志中 "auth_token": "xxx" 出现在多层 object 里。这时候正则极易误匹配。这种场景,Sublime 就该让位给 jq 或 Python 的 json.load() ——正则不是万能的,尤其面对非规则文本时,边界判断比写对表达式还关键。











