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

grep/Perl正则匹配指定课程行并关联返回对应平台分区头

实现方案

问题核心

纯逐行匹配加正反预查的写法无法满足需求:大部分grep工具默认逐行处理文本,可变长度反向预查在多数正则引擎里支持有限,没法稳定定位到每个课程行之前不定行数的分区头。

可用命令(适配Windows环境Perl运行环境)

最稳定的实现用Perl单行命令即可,Windows下安装Strawberry Perl、或是用Git Bash自带的Perl都能直接跑,以搜索关键词java为例:

perl -0777 -ne 'while(/(.+?\@.+?)\R=+\R(.*?)(?=\R.+?\@|\z)/gs){$h=$1; while($2=~/^\d+\..*?java.*$/mgi){print "$h\n$&\n\n"}}' courses.txt

参数说明

  • -0777:一次性读取整个文件内容到内存,解决逐行匹配无法关联上文分区头的问题
  • 第一层正则按分区拆分内容:捕获组1拿到分区首行(带注册邮箱的提供方信息,用@做锚点避免误匹配分隔线/课程行),捕获组2拿到该分区下所有课程条目,匹配到下一个分区头或是文件末尾就停止当前分区的捕获
  • 第二层正则在当前分区的课程列表里匹配所有带目标关键词的条目,命中后先输出提前缓存的分区头,再输出命中的课程行,结果之间用空行分隔
  • 自定义调整:替换搜索关键词时直接把命令里的java改成目标词即可;不需要大小写不敏感匹配就去掉正则修饰符里的i

输出效果示例

edX (anjan.fizz@gmail.com)
3. Introduction to Java Programming

Coursera (fizz_demo@outlook.com)
12. Advanced Java Concurrency Practice

如果硬要用grep实现,Windows下的GNU grep没有直接支持不定长上文抓取的参数,折腾正则的成本远高于直接用上面的Perl命令,不需要额外绕弯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:54:22