Bash array + sed + html

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
opmeitle
Forista Nuevo
Forista Nuevo
Mensajes: 16
Registrado: Sab Feb 11, 2012 11:52 pm

Bash array + sed + html

Mensaje por opmeitle » Mié Ago 01, 2012 5:38 am

Hola, como van? bueno tengo un problemita o una idea.

lo que quiero hacer una modificación de un item por otro, de cada array y luego guardarlo o devolverlo en el sitio original, quizas se pueda hacer directamente de otra manera con exp. regulares , bueno espero sugerencias , saludos

Código: Seleccionar todo

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
 su

Código: Seleccionar todo

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
Snark1994
Forista Menor
Forista Menor
Mensajes: 76
Registrado: Sab Abr 02, 2011 11:43 pm

Re: Bash array + sed + html

Mensaje por Snark1994 » Sab Ago 18, 2012 2:24 pm

Puedes darnos un ejemplo del contenido de nuevo-focus.html, por favor? No entiendo exactamente lo que piensas de hacer. Quieres cambiar los precios de algunas cosas en este fichero (el primero precio en 'price' con el primero en 'price2', el segundo precio etc. etc.)?

Si es así, pienso que este funciona bien:

Código: Seleccionar todo

#!/usr/bin/env bash
fichero='/home/delkav/info-sitioweb/html/productos/autos/nuevo-focus.html'
price=( $(cat $fichero | grep -oiE '([$][0-9.]{1,7})' | tr '\n' ' ') )
price2=( '$90.880' '$0' '$920' '$925' '$930' '$910' '$800' '$712' '$27.220' '$962' )

sub (){
    cp ${fichero}{,.bak}
    sed "s/$1/$2/g" ${fichero}.bak > ${fichero}
    rm ${fichero}.bak
}

for i in $(seq 0 $(( ${#price[*]} - 1))); do
    echo "$i: ${price[$i]} => ${price2[$i]}"
    sub ${price[$i]} ${price2[$i]}
done
Cuidado: este código cambiará todos los precios iguales en el fichero - por ejemplo, si hay dos cosas que cuestan $50, pues los dos se harán el nuevo precio del primero $50 (i.e. no es posible cambiar el primero $50 a $100 y el segundo a $20 - los dos se harán $100).

Espero que te he ayudado
No soy hispanohablante - si he cometido un error con mi español, dime por favor :) me gustaría mejorarlo
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje