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

Bash中保留含web或batch+web的行,删除仅含batch的行

解决sed过滤仅含batch行的问题

我需要生成一个子模式,要求删除所有仅涉及batch的行,保留同时包含batch和web的行,以及仅包含web的行。但用以下命令处理后,仅含web的行也消失了,不符合预期:

sed -i -e '/batch/!b' -e '{/web/!d;}' $target_file

问题根源

原命令想通过/batch/!b跳过不含batch的行,只处理含batch的行——删除其中不含web的行。但因为sed的语法细节,导致仅web的行被意外处理并删除。核心需求其实是:删除所有包含batch但不包含web的行,其余行全部保留。

正确解决方案

方案1:修正后的sed命令

直接定位“含batch但不含web”的行进行删除,逻辑精准:

sed -i '/batch/ {/web/!d;}' "$target_file"

或者更简洁的写法:

sed -i '/batch/!b; /web/!d' "$target_file"

方案2:用awk实现(逻辑更直观)

awk的条件判断更易懂:保留“不含batch”或者“同时包含batch和web”的行:

awk '!/batch/ || /web/' "$target_file" > temp && mv temp "$target_file"

效果验证

用上述任一命令处理起始文件后,会得到预期输出:

  • 仅含batch的行(比如classDef batch fill:#050、22.6.90.01.0===22.6.90.02.0:::batch_conf_livré等)被删除
  • 仅含web的行和同时包含batch&web的行全部保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:40:30