1

HTML ファイルの価格を変更して、それらを検索して配列に保存する必要がありますが、/nuevo-focus.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

出力 "cat /home/.../nuevo-focus.html|grep -oiE '([$][0-9.]{1,7})'|tr '\n' ' '` )" は...

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

1 に答える 1

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' )

質問のパート2の編集

この行で行おうとしているのsedが、ファイル内の価格を置き換えて、古い価格を上書きすることである場合は、次のようにする必要があります。

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

これにより、その場で置換が実行され ( -i)、入力ファイルが変更されます。


質問のパート3の編集

入れ子になったループが本当に意味をなさないことに気付きました。あなたがやりたいことは、の各価格を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...
于 2012-08-01T02:59:47.023 に答える