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

为何Vim换行搜索替换指令有效而Sed无效?技术问询

Sed命令无法生效的原因及解决办法
  • 核心问题:Sed的逐行处理机制
    Sed默认以行为单位处理文本,每次只会把一行内容加载到「模式空间」(Sed用来处理文本的临时缓冲区)中。你写的正则表达式\(.*\)\n\(fudge\)需要匹配跨行的换行符,但默认模式下模式空间里根本没有换行符,自然匹配失败。

而Vim的%s/.../.../g命令是对整个文件内容进行处理,它会把全部文本加载到内存中,所以能识别跨行的\n,实现你要的效果。

  • Sed的解决方法
    要让Sed处理跨行内容,需要用N命令把下一行内容追加到模式空间里,这样模式空间中就会包含换行符,就能匹配你的正则了。比如:
sed -e 'N;s/\(.*\)\n\(fudge\)/\1  \2/' test

如果文件中有多处fudge需要处理,可以用循环逻辑实现批量处理:

sed -e ':loop;N;s/\(.*\)\n\(fudge\)/\1  \2/;b loop' test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:52:35