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

Bash如何仅在指定标点符号位置对长行进行折行处理?

完全可以实现,以下是两种常用的命令行方案:

方案1:awk 自定义规则折行(推荐,容错性更高)

该方案会优先在指定标点处折行,若前N个字符内无符合要求的标点则按最大宽度硬切,同时自动清理新行开头的多余空格:

awk -v max_width=20 '{
    remain = $0
    while (length(remain) > max_width) {
        # 从最大宽度位置往前查找最近的目标标点
        if (match(substr(remain, 1, max_width), /.*[,。!?,.!?]/)) {
            print substr(remain, 1, RSTART + RLENGTH - 1)
            remain = substr(remain, RSTART + RLENGTH)
            # 去除新行开头的空白字符
            sub(/^[[:space:]]+/, "", remain)
        } else {
            # 无匹配标点时按最大宽度切割
            print substr(remain, 1, max_width)
            remain = substr(remain, max_width + 1)
        }
    }
    print remain
}' input_file

参数调整说明

  • 修改max_width=20的数值即可调整最大行宽
  • 正则部分[,。!?,.!?]可以自行增减需要作为折行位点的标点,支持中英文标点混用

方案2:Perl 一行命令(适合临时快速使用)

perl -pe 's/(.{1,20}[,。!?,.!?])\s*/$1\n/g' input_file

同样修改1,20的数字即可调整行宽,正则部分的标点规则和上面一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:36:03