Bash脚本如何提取Org片段并移除多种前置注释字符
修正后可直接运行的Bash函数
capture () { local efile="$1" # 合并所有支持的注释符正则,无需手动切换分支 local charcl='^[[:space:]]*((#|;|!)+|//|@c)[[:space:]]*' local begorg="${charcl}"'Mode: org$' local endorg="${charcl}"'# End of org$' awk -v ccls="$charcl" -v bego="$begorg" -v endo="$endorg" \ '$0 ~ bego { found=1; next } $0 ~ endo { found=0; print ""; next } found { sub(ccls, ""); print }' "$efile" }
关键修改说明
- 合并了两类注释符的正则规则,无需手动切换
impl变量即可同时支持#、;、!、//、@c所有注释类型 - 修复了awk中变量引用的错误:
sub的第一个参数直接传变量ccls而非用/包裹,避免被识别为字面量正则 - 匹配到结束标记时额外输出空行,和预期输出中不同块之间的空行格式对齐
- 结束标记匹配后加
next避免输出结束标记行本身
运行上述函数处理你提供的示例文件,输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者Dilna
相关产品推荐
相关产品推荐

