首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash数组的行号处插入文件内容

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

Stack Overflow用户
提问于 2020-04-02 04:59:44
回答 1查看 42关注 0票数 1

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

代码语言:javascript
复制
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循环,遍历数组索引:

代码语言:javascript
复制
for ((i=0;i<${#filepaths[@]};++i)); do
    sed -i "${lines[i]}r ${filepaths[i]}" file.tex
done

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

代码语言:javascript
复制
sed: 1: "file.tex": invalid command code f

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-02 18:56:45

您可以使用以下脚本:

代码语言:javascript
复制
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

因为替换字符串中有/,所以在sed中使用替换分隔是很重要的,例如~

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60980245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档