1
基本上有一个“模板”文件我想填充一些其他辅助文件的内容,它们基本上是一个矩阵的数字和字母。我做了其他替代品,但这是一件麻烦事。SED用bash替换变量,变量是存储在数组中的另一个文件的内容
在模板文件中,我将“%label”放在我想要用辅助文件进行替换的地方。然后,我用这个脚本做替代:
for i in $(cat file_list.txt); do
array[$i]=$(<file_$i.txt)
done
for i in $(cat file_list.txt); do
sed -e "s/%label/${array[$i]}/g"<template.txt> final_file_$i.txt
done
(“file_list中”包含文件的名称),但我不断收到错误“的sed:-e表达式#3,焦炭58:未结束的'S'命令”。
我也试过这种脚本来做到这一点:
for i in $(cat file_list.txt); do
mapfile < file_$i.txt
array[$i]=${MAPFILE[@]}
done
for i in $(cat file_list.txt); do
sed -e "s/%label/${array[$i]}/g"<template.txt> final_file_$i.txt
done
在这种情况下,我没有收到错误警告和替代而成,但不换行。
有没有办法让替代保持断行?
谢谢。
根本的问题是,无论'$ {数组[$ i]}'得到由壳扩大到受'sed'语法,这意味着如果在文件名中'file_list.txt'是包含斜线的路径(因为这是您在'sed'表达式中用作分隔符的地方),或者是从sed'的角度来看替换失败的任何其他特殊字符。 –
谢谢你的回答,@AdrianFrühwirth。 我的文件名此刻不包含反斜杠。此外,当我使用“mapfile”时,我没有得到任何错误。 虽然我尝试将sed分隔符更改为逗号,但我仍然收到相同的错误。 –