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

如何用sed将匹配字符串替换为文件内容而非追加到行后?

要实现用文件内容直接替换PLACE_HOLDER而不是追加到行后,给你两个实用方法:

方法一:sed结合命令替换(适合中小文件)

这个方案直接把文件内容转义后作为替换值,避免sed解析出错:

sed "s/PLACE_HOLDER/$(sed 's/[\/&]/\\&/g' input.txt)/" <<< '<div>PLACE_HOLDER</div>'

执行后输出:

<div>abc</div>

其中sed 's/[\/&]/\\&/g' input.txt是为了转义文件里的/和&(这俩是sed替换的特殊字符),防止替换时出现语法错误。

方法二:awk处理(适合大文件)

如果你的input.txt是大文件,用变量存内容太占内存,就用awk逐行读取文件内容再替换:

awk '
    BEGIN {
        while ((getline line < "input.txt") > 0) {
            content = content line ORS
        }
        sub(/'$ORS'$/, "", content)
        close("input.txt")
    }
    {gsub(/PLACE_HOLDER/, content); print}
' <<< '<div>PLACE_HOLDER</div>'

执行后同样得到目标输出:

<div>abc</div>

之前你的sed命令之所以会把内容追加到行后,是因为r命令的特性就是把文件内容追加到匹配行的后面,而不是替换匹配的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:55:15