在bash数组的第行插入文件内容



我有两个bash数组,一个包含文件名,另一个包含行号:

filepaths=(fig/par1.tex fig/par2.tex fig/par3.tex)
lines=(5 10 15)

我有另一个文件(file.tex(,我想将$filepaths中列出的每个文件的内容插入到$lines$中相应的行号,以替换file.tex中该行的内容。例如,fig/par1.tex的内容将取代file.tex的行5,而fig/par2.tex的内容将替代file.tex的行10。

我尝试使用for循环,在数组索引上迭代:

for ((i=0;i<${#filepaths[@]};++i)); do
sed -i "${lines[i]}r ${filepaths[i]}" file.tex
done

但我在循环的每次迭代中都会得到一个错误:

sed: 1: "file.tex": invalid command code f

从文件中获取第n行的建议问题Bash工具提供了按行号打印文件中特定行的答案。这并不能回答我的问题,这个问题涉及在数组变量上迭代以在行号处插入文本。

您可以使用以下脚本:

s=
# loop through array and build sed command
for ((i=0;i<${#lines[@]};++i)); do
printf -v s '%s%sn%sn' "$s" "${lines[i]}r ${filepaths[i]}" "${lines[i]}d"
done
# check sed command    
# echo "$s"
# run a single sed
sed -i.bak "$s" file.tex

使用以sed(即~(分隔的备用字符串非常重要,因为替换字符串中有/

最新更新