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

如何使用sed或awk删除所有紧跟bar(仅空白分隔)的foo且不改变空白格式?

如何使用sed或awk删除所有紧跟bar(仅空白分隔)的foo且不改变空白格式?

嘿,这个需求我太熟了,刚好可以用sed或者awk轻松搞定,而且完全不会破坏原来的空白布局,给你两种方案参考:

用sed实现

sed的正则替换就能精准匹配并处理,核心思路是捕获foo和bar之间的空白部分,然后把"foo+空白"替换成"空白",这样就只删掉了目标foo,空白完全保留。

执行命令:

# GNU sed 或支持扩展正则的sed
sed -E 's/foo([[:space:]]+)bar/\1bar/g' 你的文件名.txt

如果是macOS等使用BSD sed的环境,需要把括号转义:

sed 's/foo\([[:space:]]\+\)bar/\1bar/g' 你的文件名.txt
  • 解释一下:[[:space:]]+ 匹配一个或多个空白字符(空格、制表符都算);括号()用来捕获这部分空白,替换时用\1调用捕获的内容,这样就把前面的foo去掉,只留下空白和bar。末尾的g是全局替换,确保一行里多个符合条件的foo都会被处理。

用awk实现

如果更习惯awk,可以用它的gensub函数(GNU awk支持),思路和sed完全一致:

awk '{print gensub(/foo([[:space:]]+)bar/, "\\1bar", "g")}' 你的文件名.txt
  • gensub是awk里支持捕获组的替换函数,第三个参数"g"同样是全局替换,\\1对应捕获的空白部分,最终输出处理后的每行内容。

验证效果

拿你的示例输入测试:
原内容:

foo  bar
foo    bar bar
foo foo      bar  foo

执行命令后会得到:

bar
bar bar
foo       bar  foo

完全符合你想要的结果~

备注:内容来源于stack exchange,提问作者vim_overlord

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:44:49