2

我有一个包含 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 很多次。我错过了什么?

提前致谢!

4

2 回答 2

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 将进行内联编辑并将替换的文件保存在同一文件中。

于 2013-04-23T15:41:19.787 回答
1

只需将循环变量合并到输出文件名中。注意 gallery$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
于 2013-04-23T15:11:35.637 回答