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

如何在脚本HD头中捕获Edymode行并在首个END OF HD处停止匹配?

解决方案:提取HD头部块内的Edymode行

方案1:用sed精准定位范围并筛选

sed能直接限定从HD起始到第一个END OF HD结束的块,再从中提取目标行:

sed -n '/^HD$/,/^END OF HD$/{/Edymode:/p}' example.txt
  • -n:仅输出匹配的行
  • /^HD$/,/^END OF HD$/:锁定范围——从精确匹配HD的行开始,到第一个精确匹配END OF HD的行终止
  • {/Edymode:/p}:在这个范围内,只打印包含Edymode:的行

如果HD或END OF HD前后可能有空白字符(空格、制表符),调整正则适配:

sed -n '/^[[:blank:]]*HD[[:blank:]]*$/,/^[[:blank:]]*END OF HD[[:blank:]]*$/{/[[:blank:]]*Edymode:/p}' example.txt

方案2:用awk灵活控制匹配逻辑

awk通过标记位控制范围,遇到第一个END OF HD直接退出,效率更高:

awk '/^END OF HD$/ {exit} /^HD$/ {flag=1} flag && /Edymode:/' example.txt
  • /^HD$/ {flag=1}:碰到HD行时,开启匹配标记
  • flag && /Edymode:/:标记开启状态下,打印包含Edymode:的行
  • /^END OF HD$/ {exit}:遇到第一个END OF HD行时立刻停止处理

适配空白字符的版本:

awk '/^[[:blank:]]*END OF HD[[:blank:]]*$/ {exit} /^[[:blank:]]*HD[[:blank:]]*$/ {flag=1} flag && /[[:blank:]]*Edymode:/' example.txt

原grep命令的问题

原命令grep '^[[:blank:]]*##[[:blank:]]*Edymode:' example.txt是全局查找所有符合格式的Edymode行,没有限定在HD到第一个END OF HD的头部块内,会把文件其他位置的匹配行也提取出来,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:32:12