bash中使用数组数据替换文件内数值,sed不生效如何解决?
问题解决方法
核心原因
Bash 中单引号包裹的内容不会触发变量、数组的取值展开,你使用的sed -i 's/${readfile[$j]}/${d[$k]}/' file.txt命令里,替换规则被单引号包裹,sed 实际收到的匹配规则和替换内容是字面的${readfile[$j]}和${d[$k]},无法匹配文件中实际的坐标数值,所以文件不会被修改。
修复方案
把包裹替换规则的单引号改为双引号即可,双引号内的 Bash 变量、数组会被正常展开:
sed -i "s/${readfile[$j]}/${d[$k]}/" file.txt
额外注意事项
- 若你的坐标数值中包含
/字符(sed 默认的替换分隔符),可以更换为其他不会出现在数值中的字符作为分隔符,比如#,避免 sed 解析报错:sed -i "s#${readfile[$j]}#${d[$k]}#" file.txt - 如果你使用的是 MacOS 系统自带的 sed,
-i参数需要额外指定备份文件的后缀,不需要留存备份的话可以填写空后缀:sed -i "" "s/${readfile[$j]}/${d[$k]}/" file.txt - 正式修改原文件前建议先去掉
-i参数执行命令,确认输出的替换结果符合预期后再加-i写入,避免误改数据。
内容的提问来源于stack exchange,提问作者Khaled Badawy
相关产品推荐
相关产品推荐

