用于替换具有可变计数的图像编号的bash脚本

时间:2013-04-23 15:03:38

标签: html bash shell sed

我有一个包含200张图片的html文档。 html页面现在只有名为g001.jpg的所有图像。图像名称是图像目录中的g001.jpg到g200.jpg。我需要用g002.jpg,g002.jpg,g004.jpg等替换名称g001.jpg。我一直试图用bash做到这一点。这就是我所拥有的:

#!/bin/bash
for i in {001..200}

do
sed "s/g001.jpg/g$i.jpg/g" gallery2.html > gallery3.html

done

**要清楚我正在尝试重命名对html文档中图像文件名的引用。 html文档不需要重命名。

这当然会将它们重命名为g1.jpg多次,然后用g2.jpg重复一次,然后g3.jpg重复一遍,依此类推,直到我多次获得g200.jpg。我错过了什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

只需将循环变量合并到输出文件名中即可。 注意画廊$ i_new.html是我的命名......

for i in {001..200}
do
   sed "s/g001.jpg/g$i.jpg/g" gallery$i.html > gallery$i_new.html
done

答案 1 :(得分:1)

这里有很多问题。如果你使用这样的sed它将取代每个&每次出现g001.jpg而不是第一个实例。您还想要替换g001.jpg with g002.jpg, g002.jpg, g004.jpg,因此您需要使用数字2开始循环。以下代码应该适合您:

for l in {2..200}
do
   i=$(printf "%03d" $l)
   sed -i.bak "1,/g001\.jpg/{s/g001\.jpg/g${i}.jpg/g;}" gallery2.html
done

请注意,由于上面的-i标志,sed将执行内联编辑并将替换的文件保存在同一文件中。