2013-04-23 91 views
2

我有一個帶有200個圖像的html文檔。現在,html頁面中包含所有名爲g001.jpg的圖像。圖像目錄中的圖像名稱是g001.jpg到g200.jpg。我需要用g002.jpg,g002.jpg,g004.jpg等替換名稱g001.jpg。我一直試圖用bash來做到這一點。這是我有:bash腳本sed用變量數替換圖像編號

#!/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一堆次。我錯過了什麼?

在此先感謝!

回答

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會做在線編輯和保存替換的文件在同一個文件。

+0

非常感謝,效果很好! – Jason 2013-04-23 16:41:40

+0

不客氣,很高興它解決了問題。 – anubhava 2013-04-23 16:44:30

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

有時最好編寫'$ {i} _new.html'以避免解釋者認爲'i_new'是變量的名稱。 – fedorqui 2013-04-23 15:20:56

+0

謝謝,但是這會重命名html文檔。我只需要將引用重命名爲html文檔中的圖像文件名稱,並生成一個新的html文檔(即gallery3.html)。 – Jason 2013-04-23 15:21:20

+0

@fedorqui我的印象是一個字符長度變量被保證正確解析沒有{}。 – suspectus 2013-04-23 15:31:55