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

如何用sed删除StartHere到EndHere或行尾间的所有字符?

解决sed匹配两种场景的问题

我来帮你搞定这个sed的匹配问题~你的初始命令只能处理包含EndHere的行,要同时覆盖「有EndHere」和「无EndHere到行尾」两种情况,这里有两个实用方案:

方案1:单正则表达式一步搞定

用一个正则让EndHere成为可选匹配项,同时匹配到行尾,命令如下:

sed -i -e 's/StartHere\(.*\)\(EndHere\)\?$/StartHere\2/' your_file.txt

细节解释:

  • StartHere:精准匹配行开头的固定字符串
  • \(.*\):贪婪匹配StartHere之后的所有内容
  • \(EndHere\)\?$:匹配行尾的EndHere,\?标记这个内容是可选的
  • 替换为StartHere\2:保留StartHere,如果行里有EndHere就一并保留,否则只留下StartHere

用你的示例测试:

原行1:StartHere Word1 EndHere → 处理后:StartHereEndHere
原行2:StartHere Word2 → 处理后:StartHere

方案2:分两步替换(更直观)

如果觉得单正则有点绕,可以拆成两个有序的替换步骤,注意顺序不能乱:

sed -i -e 's/StartHere\(.*\)EndHere/StartHereEndHere/' -e '/EndHere/! s/StartHere.*/StartHere/' your_file.txt

细节解释:

  1. 第一个命令:专门处理包含EndHere的行,直接删除StartHere和EndHere之间的所有内容
  2. 第二个命令:只对**不包含EndHere**的行(/EndHere/!表示反向匹配),删除StartHere之后的所有内容

这种方式逻辑更清晰,也不会破坏已经处理过的带EndHere的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:23:10