通过使用bash查找和替换来从模板生成新文件

问题描述 投票:1回答:1

我有一个模板LaTeX文件,在文本中包含一个计数器(称为“Contador”),如

\addplot[] table[]{figure-contador.csv}   

该计数器允许我包含来自CSV文件中编码的大量数字的数据。该文件名为test.tex。 我想从模板中生成100个新文件,例如test0.tex,test1.tex,test2.tex等。我以为我可以用sed轻松完成,我尝试了脚本

#!/bin/bash
for i in {0..99} do 
    sed 's/contador/$i/g' test.tex > test$i.tex 
done  

但这不起作用。我究竟做错了什么?

bash sed
1个回答
0
投票

尝试:

#!/bin/bash
for i in {0..99}; do
    sed "s/contador/$i/g" test.tex > "test$i.tex"
done

有两个问题:

  1. for i in {0..99}do需要用换行符或分号分隔。
  2. 在单引号内,$i等shell变量不会扩展。要允许它们扩展,请使用双引号。

Alternative using awk

for i in {0..99}; do
    awk -v i="$i" '{gsub(/contador/, i)} 1' test.tex >"test$i.tex"
done
© www.soinside.com 2019 - 2024. All rights reserved.