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

如何将多组替换规则存入变量传入sed命令一次性执行并输出文件

问题根因
  • 报错的核心是Shell的分词机制:你直接传递未加引号的$sub变量时,Shell会把变量内容里的空格识别为参数分隔符,原本整串的替换规则会被拆成多个独立参数传给sed,sed会把第二个及以后的规则片段当成要处理的文件名,自然就报「No such file or directory」。
  • 直接手写规则时你给规则加了双引号,整串作为单个sed脚本参数传递,所以可以正常执行。
解决方法

只要给sed命令中的$sub变量包裹双引号,让整段替换规则作为单个参数传递即可,修正后的核心代码如下:

#!/bin/bash
test="a,b|c,d|e,f|j,l"
# 提前定义待处理文件路径,保证变量有效
FILE="./待处理的目标文件.txt"
# 用原生变量替换做分割,避免额外调用sed,性能更好也更稳定
arr=(${test//|/ })
sub=""
for i in "${arr[@]}"
do
    array=(${i//,/ })
    sub+="s/${array[0]}/${array[1]}/g;"
done
# 关键改动:给$sub加双引号,避免Shell分词拆分规则
sed "$sub" "${FILE}" > output.json
可选优化方案

如果不想用循环处理,也可以直接通过单次sed把配置字符串转成替换规则,执行效率更高:

#!/bin/bash
test="a,b|c,d|e,f|j,l"
FILE="./待处理的目标文件.txt"
# 直接把配置字符串转成sed规则串
sub=$(echo "$test" | sed -e 's/|/\/g;/g' -e 's/,/\//g')
sed "${sub}/g" "${FILE}" > output.json

注意:如果你的匹配项或替换项中包含/、&、正则特殊字符,需要提前对这些字符做转义处理,避免sed规则解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:21:00