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

如何使用sed在```标记块内按规则在30-35字符位置拆分行

sed代码块行拆分正确实现

你原有脚本的核心问题包括:未跳过代码块首尾的标记行、未优先匹配30-35区间内最靠右的分隔符、未区分不同分隔符的换行规则、循环跳转逻辑存在打印重复/漏处理的问题。
可直接使用以下脚本实现需求:

sed -E '
/^```[a-zA-Z0-9]+/,/^```/ {
  # 代码块首尾标记行直接输出,不做拆分
  /^```/ { p; d; }
  :split_loop
  # 当前行长度≤35时直接输出,终止拆分循环
  /^.{0,35}$/ { p; d; }
  # 优先匹配30-35区间最右侧空格,替换为换行
  s/^(.{30,35}) (.*)$/\1\n\2/
  t split_loop
  # 无空格时匹配区间最右侧.或,,在标点后追加换行
  s/^(.{30,35}[.,])(.*)$/\1\n\2/
  t split_loop
  # 兜底:区间内无指定分隔符时强制在35字符处拆分
  s/^(.{35})(.*)$/\1\n\2/
  b split_loop
}
' 待处理文件路径
实现逻辑说明
  • 范围控制:仅处理行首后接单词的起始标记,到行首结束标记之间的内容,标记本身不做任何修改
  • 拆分规则:严格在每行开头后30-35字符区间内寻找分隔符,优先匹配最靠右的分隔符拆分,保证拆分后的行长度尽可能接近35字符上限
  • 换行逻辑:拆分点为空格时直接替换空格为换行;拆分点为.或,时保留标点,在标点后插入换行,完全匹配要求
  • 循环处理:每次拆分完成后,对剩余的后半段内容重复执行拆分判断,直到整行处理完成
  • 异常兼容:如果30-35区间内不存在指定分隔符,会强制在第35字符位置拆分,避免超长行漏处理

使用你提供的示例输入测试,输出和预期效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:45:33