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

如何通过命令行仅搜索Jupyter Notebook的Markdown单元格?

当然可以!针对Jupyter Notebook这种JSON格式的文件,我们可以结合文本处理工具精准筛选出Markdown单元格里的内容,下面给你几个实用的方案,总有一个适合你:

方法1:用jq + 搜索工具(最精准,推荐)

Jupyter Notebook本质是JSON结构,用jq(专门的JSON处理工具)可以完美提取出所有Markdown类型的单元格内容,再交给ag/grep搜索目标字符串,完全不会误搜到代码单元格或者其他元数据。

步骤:

  1. 先确保你安装了jq(Linux发行版用apt install jq/dnf install jq,macOS用brew install jq)
  2. 执行对应的搜索命令:
    • 搜索单个Notebook文件:
      jq -r '.cells[] | select(.cell_type == "markdown") | .source[]' notebook.ipynb | ag "要搜索的字符串"
      
    • 搜索目录下所有.ipynb文件:
      find . -name "*.ipynb" -exec jq -r '.cells[] | select(.cell_type == "markdown") | .source[]' {} \; | ag "要搜索的字符串"
      
    如果习惯用grep,把上面的ag换成grep就行。

方法2:直接用grep正则匹配(无需额外工具)

如果你不想装jq,可以用grep的正则功能来匹配Markdown单元格的内容块,虽然精度略逊于jq,但应急够用:

基础版(适合短内容)

grep -r -A 1000 -B 10 '"cell_type": "markdown"' --include="*.ipynb" . | grep "要搜索的字符串"
  • -A 1000表示匹配到目标行后再显示后面1000行(覆盖大部分Markdown单元格内容),-B 10显示前面10行确保包含source块
  • --include="*.ipynb"只搜索Notebook文件

进阶版(用PCRE递归匹配,更精准)

如果你的grep支持-P参数(PCRE正则),可以用跨多行匹配来精准定位Markdown单元格的source块:

grep -r -P '(?s)"cell_type": "markdown".*?"source": \[(.*?)\]' --include="*.ipynb" . | grep "要搜索的字符串"
  • (?s)让.匹配换行符,实现跨多行匹配整个Markdown单元格块

方法3:给ag添加自定义ipynb文件类型支持(最便捷,符合你的需求)

ag支持自定义文件类型的处理规则,我们可以配置让ag识别.ipynb文件,并且只搜索其中的Markdown单元格,用法就和--markdown一样方便:

步骤:

  1. 创建或编辑~/.agrc配置文件(如果没有就新建一个)
  2. 添加以下内容(注意转义双引号):
    --ipynb=*.ipynb
    --cmd-ipynb='jq -r ".cells[] | select(.cell_type == \"markdown\") | .source[]"'
    
  3. 保存后,就可以像搜索Markdown文件一样搜索Notebook了:
    ag --ipynb "要搜索的字符串" .
    

这个配置告诉ag:遇到.ipynb文件时,先用jq提取Markdown单元格内容,再进行搜索,完全符合你想要的“类似--markdown的便捷方式”!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:39:46