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

如何实现文本中以'-'开头的字符串按规则换行排版?

按规则拆分命令行参数到多行

我有一个文本文件,内容如下:

-V -am line+tgl -am assert -debug+all -zdb -fcs_assert off 

需求是:查找所有以-开头的字符串,若其下一个词同样以-开头,则将该词移至下一行;若下一个词不以-开头,则保持在同一行。预期输出如下:

-V
-am line+tgl
-am assert
-debug+all
-zdb
-fcs_assert off

我尝试执行命令 cat ins.tmp/cmd.vcs | sed 's/ /\n/g' 将空格替换为换行符,但无法完成后续将不以-开头的行追加到上一行的操作,求解决方法。


方法1:用sed一键处理

直接通过sed的正则替换就能实现需求,无需先拆分再合并:

sed -E 's/ (-)/\n\1/g' ins.tmp/cmd.vcs

逻辑说明:

  • -E 启用扩展正则表达式,简化括号的写法
  • 正则 (-) 匹配空格+'-'的组合,把它替换成换行符+'-'——这样所有以-开头的参数都会被单独拆到新行,而跟在-参数后的非-开头内容会自动留在同一行。

方法2:用awk实现更清晰的逻辑控制

如果需要更直观的字段处理逻辑,awk是更好的选择:

awk '{
    for(i=1;i<=NF;i++){
        if($i ~ /^-/){
            if(i>1) print ""
            printf "%s", $i
        } else {
            printf " %s", $i
        }
    }
    print ""
}' ins.tmp/cmd.vcs

逻辑说明:

  1. 遍历行内的每一个字段(NF代表当前行的总字段数)
  2. 若当前字段以-开头:
    • 不是第一个字段的话先打印换行符(换行)
    • 输出当前字段
  3. 若当前字段不以-开头:
    • 前面加空格,追加到当前行末尾
  4. 最后打印换行符,保证输出结尾有正常换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:28:01