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

sed c命令捕获多行内容并去除空行需求及替代方案咨询

解决方案

使用sed实现

你需要在begin和end标记区间内删除空行,同时保留标记本身和非空内容,sed可通过区间定位+条件分支实现:

sed '/^begin$/,/^end$/{
    /^begin$/b
    /^end$/b
    /^$/d
}' file

命令说明:

  • /^begin$/,/^end$/:定位begin到end的行区间
  • /^begin$/b 和 /^end$/b:遇到begin或end行时直接输出,不执行后续删除操作
  • /^$/d:删除区间内的空行

使用awk实现(逻辑更直观)

awk处理多行区间的可读性更强,同样能满足需求:

awk '/^begin$/{flag=1; print; next}
     /^end$/{flag=0; print; next}
     flag && /./{print}' file

命令说明:

  • 匹配到begin时,开启标记flag=1,打印该行并跳过后续处理
  • 匹配到end时,关闭标记flag=0,打印该行并跳过后续处理
  • 当flag=1(处于区间内)且行非空时,打印该行

关于你的伪代码失效原因

sed的c命令是替换整个匹配区间为指定内容,无法捕获区间内原有内容做二次处理,因此不能用c命令实现“保留区间内非空内容”的需求,必须通过区间内的条件判断筛选行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:57:09