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

在Bash中将模板文件标记内容替换为指定文件内容

解决sed替换大JSON文件到JS模板的问题

你的问题出在两个核心点:一是200KB的JSON直接通过命令行参数传递,触发了系统的参数列表过长限制;二是JSON里的斜杠、引号、换行等特殊字符会破坏sed的s命令语法,导致未终止的表达式错误。

直接用sed处理大文件或含特殊字符的内容并不合适,推荐用以下两种更可靠的方案:

方案一:使用awk

awk可以直接读取文件内容,无需通过命令行传递大文本,完美规避参数过长和特殊字符问题:

awk '
/INSERT/ {
    print "const x = "
    while ((getline line < "insert.json") > 0) {
        print line
    }
    close("insert.json")
    next
}
1' template.js > result.js

命令说明:

  • 当匹配到包含INSERT的行时,先输出const x =
  • 逐行读取insert.json的内容并打印
  • 跳过原来的INSERT行(next关键字)
  • 其他行直接原样输出(1是awk的简写,代表执行print $0)

方案二:使用Perl

Perl处理含特殊字符的文本更灵活,支持一次性读取整个文件内容:

perl -pe '
if (/INSERT/) {
    open my $fh, "<", "insert.json" or die $!;
    local $/;
    my $json = <$fh>;
    close $fh;
    $_ = "const x = $json";
}
' template.js > result.js

命令说明:

  • -pe参数让Perl逐行处理输入并打印结果
  • 匹配到INSERT行时,打开insert.json并一次性读取全部内容(local $/取消行分隔符)
  • 将当前行替换为const x = 加上读取到的JSON内容
  • 其他行保持原样输出

这两个方案都不会把大JSON内容放到命令行参数里,也不需要手动转义特殊字符,完全适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:04:57