2

200 個の画像を含む html ドキュメントがあります。現在、html ページには g001.jpg という名前の画像がすべて含まれています。イメージ名は、イメージ ディレクトリ内の g001.jpg から g200.jpg です。名前g001.jpgをg002.jpg、g002.jpg、g004.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

ここにはかなりの問題があります。g001.jpgそのように sed を使用すると、最初のインスタンスではなく、出現するたびに置き換えられます。また、交換したかった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 に答える