Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在bash数组的行号处插入文件内容_Arrays_Bash_Shell - Fatal编程技术网

Arrays 在bash数组的行号处插入文件内容

Arrays 在bash数组的行号处插入文件内容,arrays,bash,shell,Arrays,Bash,Shell,我有两个bash数组,一个包含文件名,另一个包含行号: filepaths=(fig/par1.tex fig/par2.tex fig/par3.tex) lines=(5 10 15) 我还有另一个文件(file.tex),我想将$filepath中列出的每个文件的内容插入$lines$中相应行号处,替换file.tex中该行的内容。例如,fig/par1.tex的内容将替换file.tex的第5行,fig/par2.tex的内容将替换file.tex的第10行 我尝试使用for循环,迭

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

filepaths=(fig/par1.tex fig/par2.tex fig/par3.tex)

lines=(5 10 15)
我还有另一个文件(
file.tex
),我想将
$filepath
中列出的每个文件的内容插入
$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

建议的问题提供了按行号打印文件中特定行的答案。这并没有回答我的问题,这与迭代数组变量以在行号处插入文本有关。

您可以使用以下脚本:

s=

# loop through array and build sed command
for ((i=0;i<${#lines[@]};++i)); do
   printf -v s '%s%s\n%s\n' "$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
s=
#循环遍历数组并生成sed命令

对于((i=0;i@anubhava理想情况下,新文本将替换第5行。我编辑了问题以反映这一点。好的,您的问题似乎不是重复的。我已重新打开它并发布了答案。此答案将在
$filepath
中插入每个文件的文件路径,而我希望在
$filepath
中插入每个文件的内容。
s=

# loop through array and build sed command
for ((i=0;i<${#lines[@]};++i)); do
   printf -v s '%s%s\n%s\n' "$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