Ayuda con script (en bash, python o perl)

Iniciado por akakariko, 16 Septiembre 2017, 16:45 PM

0 Miembros y 1 Visitante están viendo este tema.

akakariko

Buenas tardes, me gustaría cambiar un dato de un .txt (en realidad es para no tener que modificar a mano uno a uno el número del .html)

Os cuento, en un .html que he creado, hay una línea que contiene un índice, para que al pulsar un botón se pasen unas fotos hacia adelante y hacia atrás, el caso, es que al eliminar una de esas líneas con su respectivo indice, al pulsar el botón de la web sale que no se ha encontrado el archivo (cosa lógica), lo que ocurre es que como son 2345 números los que habría que reordenar (del 1 en adelante consecutivamente) a mano es un poco desesperante. Os pongo un ejemplo:


<aesto es una línea de codigo> <data-ind="1"
<besto es una línea de codigo> <data-ind="numero que os digo"
<cesto es una línea de codigo> <data-ind="5"
<desto es una línea de codigo> <data-ind="6"

Pues lo que me gustaría hacer es un script que abra el archivo en modo txt y me reenumere esos números tal que así:

<aesto es una línea de codigo> <data-ind="1"
<besto es una línea de codigo> <data-ind="2"
<cesto es una línea de codigo> <data-ind="3"
<desto es una línea de codigo> <data-ind="4"

He intentado hacerlo en C, pero no sé como hacer para que el programa sepa que solo quiero cambiar ese número de la palabra, también lo he intentado con perl, pero como no lo manejo bien, he desistido, he buscado programas que permitan hacer eso que os he comentado pero no he encontrado ninguno capaz de reenumerar de forma ascendente el número dentro de una expresión.

Os agradecería mucho vuestra ayuda

**Aincrad**





akakariko

Gracias, he estado echándole un vistazo y sí, me sirve, pero cómo podría decirle que me busque todas las líneas data-ind="cualquier numero"?, lo que quiero es que ese cualquier número me lo cambie por el 1, el 2, el 3 según vaya el script encontrándose esa expresión

warcry.

#3
no se muy bien lo que quieres pero como estaba aburrido...  :P

bien parto de este "fichero" inicial

<aesto es una línea de codigo> <data-ind="1"
<besto es una línea de codigo> <data-ind="4"
<cesto es una línea de codigo> <data-ind="5"
<desto es una línea de codigo> <data-ind="6"


y lo que quieres es que se numeren consecutivamente

bien, en bash me ha salido esto

#!/bin/bash

# lo primero eliminamos las lineas en blanco

sed '/^$/d' fichero > fichero1

#ahora quitamos la numeracion erronea

sed s'/<data-ind="[0-9][0-9]*"//'g fichero1 > fichero2

#procedemos a numerar las lineas del archivo

nl fichero2 |awk '{print $1}' > fichero3

#ahora insertamos la cadena que indexa

sed s'/$/<data-ind="/'g fichero2 > fichero4

#unimos la secuencia numerica a la cadena que indexa

paste -d "" fichero4 fichero3 > fichero5

#y por ultimo añadimos las comillas que cierran cada expresion

sed s'/$/"/'g fichero5 > resultado

#vemos el resultado

cat resultado

#no hay que olvidarse de hacer limpieza de los archivos temporales

rm -f fichero1
rm -f fichero2
rm -f fichero3
rm -f fichero4
rm -f fichero5


echo -e "

Que tengas un buen dia

"

break



PD: que no me salga ningún purista de código a criticar, no soy programador, no se programar, ademas me aburre mogollón el tema de la programación, simplemente hago script funcionales, usease que cumplen su misión  :P
HE SIDO BANEADO --- UN PLACER ---- SALUDOS

Slava_TZD

#4
Te dejo como hacerlo en vim.

:let i=1 | g/<data-ind="\d\+"/s//\="<data-ind=\"".i."\""/ | let i=i+1



Nótese el .i., cualquier otra solución es por definición menos masculina.

Suerte



The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.