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

如何移除Jupyter Notebook文件grep输出中的控制序列、ANSI颜色码及ANSI转义码

如何移除Jupyter Notebook文件grep输出中的控制序列、ANSI颜色码及ANSI转义码

我来帮你解决这个问题!当你用grep查找Jupyter Notebook文件时,遇到那些像\u001b[32m这类的ANSI转义码确实很影响阅读,这里有几种实用的方法可以帮你清除它们:

方法一:用sed过滤转义码

sed是处理文本的常用工具,可以通过正则表达式精准匹配并移除ANSI颜色控制码。你可以在grep之后管道sed命令:

grep "INFO" your_notebook.ipynb | sed 's/\x1b\[[0-9;]*m//g'

解释一下:

  • \x1b代表ASCII转义字符(对应你看到的\u001b)
  • \[[0-9;]*m匹配ANSI颜色码的标准格式(比如[32m、[1;36m这类)
  • 这个命令会把所有颜色控制码替换为空,输出干净的文本

方法二:用perl处理更通用的ANSI转义序列

如果你的输出里还有其他类型的ANSI转义码(不止颜色码),perl的正则可以覆盖更全面的情况:

grep "INFO" your_notebook.ipynb | perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'

这里的\e和\x1b是同一个意思,[a-zA-Z]匹配转义码的结尾字符(比如m、H、J等),能处理更多类型的控制序列。

方法三:用Python脚本批量清理Notebook文件

如果你想直接修改Notebook文件,把里面所有的ANSI转义码都去掉,可以用Python脚本处理(毕竟Jupyter Notebook本身就是JSON格式的文件):

import re
import json

# 替换为你的Notebook文件名
notebook_path = "your_notebook.ipynb"
cleaned_path = "cleaned_notebook.ipynb"

# 定义移除ANSI转义码的函数
def strip_ansi_codes(text):
    # 匹配所有ANSI转义序列的正则
    ansi_pattern = re.compile(r'\x1b\[[0-9;]*[a-zA-Z]')
    return ansi_pattern.sub('', text)

# 读取并解析Notebook文件
with open(notebook_path, "r", encoding="utf-8") as f:
    nb_data = json.load(f)

# 遍历所有单元格,清理输出文本
for cell in nb_data["cells"]:
    if "outputs" in cell:
        for output in cell["outputs"]:
            if "text" in output:
                # 处理每一行文本
                output["text"] = [strip_ansi_codes(line) for line in output["text"]]

# 保存清理后的文件
with open(cleaned_path, "w", encoding="utf-8") as f:
    json.dump(nb_data, f, indent=2)

运行这个脚本后,你会得到一个没有ANSI转义码的干净Notebook文件,之后再用grep查找就不会看到那些乱码了。

另外补充一下:你遇到的这个情况是因为Loguru默认输出带颜色的日志,Jupyter会把这些颜色控制序列直接保存到Notebook文件里,上面的方法不管是临时过滤输出还是永久清理文件都能解决问题~

备注:内容来源于stack exchange,提问作者Constantin Hong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:29:50