2012-08-01 51 views
1

我需要改變價格的HTML文件,搜索並存儲在數組,但我必須要改變並保存/nuevo-focus.html擊陣+ SED + HTML

price=(`cat /home/delkav/info-sitioweb/html/productos/autos/nuevo-focus.html | grep -oiE '([$][0-9.]{1,7})'|tr '\n' ' '`) 

price2=($90.880 $0 $920 $925 $930 $910 $800 $712 $27.220 $962) 
sub(){ 
for item in "${price[@]}"; do 
    for x in ${price2[@]}; do 
     sed s/$item/$x/g > /home/delkav/info-sitioweb/html/productos/autos/nuevo-focus.html 
    done 
done 
} 

sub 

輸出「貓/家/.../nuevo-focus.html|grep -oiE「([$] [0-9] {1,7})| TR '\ n''「')」是...

$86.880 $0 $912 $908 $902 $897 $882 $812 $25.725 $715 

回答

5

bash中,變量$0$9指的是正在運行的腳本的各個命令行參數。在行:

price2=($90.880 $0 $920 $925 $930 $910 $800 $712 $27.220 $962) 

他們將被擴展成空字符串或者你給腳本的命令行參數。

儘量不要做這樣的:

price2=('$90.880' '$0' '$920' '$925' '$930' '$910' '$800' '$712' '$27.220' '$962') 

編輯問題的第二部分

如果你正在嘗試與sed線做的是更換價格的文件中,覆蓋那麼你應該這樣做:

sed -i s/$item/$x/g /home/delkav/info-sitioweb/html/productos/autos/nuevo-focus.html 

這將執行替換到位(-i),修改輸入文件。


編輯問題

三個部分,我才意識到,你的嵌套循環並沒有真正意義。我假設你想要做的是從price與相應的價格代替每個價格在price2

如果是這樣的話,那麼你應該使用一個循環,遍歷數組的索引:

for i in ${!price[*]} 
do 
    sed -i "s/${price[$i]}/${price2[$i]}/g" /home/delkav/info-sitioweb/html/productos/autos/nuevo-focus.html 
done 

我不能夠測試的權利,但我認爲它應該完成你想要的。

解釋這一點:

${!price[*]}給你所有的陣列(例如0 1 2 3 4 ...

對於每一個指標,我們再與更換新的相應的舊價格指數。如你所做的那樣,不需要嵌套循環。當你執行的是,你正在做的基本上是這樣的:

replace every occurence of "foo" with "bar" 
# at this point, there are now no more occurences of "foo" in your file 
# so all of the other replacements do nothing 
replace every occurence of "foo" with "baz" 
replace every occurence of "foo" with "spam" 
replace every occurence of "foo" with "eggs" 
replace every occurence of "foo" with "qux" 
replace every occurence of "foo" with "whatever" 
etc... 
+0

好,我理解,但在句子的sed代碼的/ $ INTEM/$ X/G'不行的,因爲?並輸出保存在文件html中,如何? – opmeitle 2012-08-01 16:25:21

+0

我已經更新了我的答案,以表明您如何做到我認爲您正在嘗試做的事。 – 2012-08-01 16:30:59

+0

謝謝,這項工作!但如何更改array2的陣列價格?我的代碼不適用於兩個。 – opmeitle 2012-08-01 17:40:43