Go Back   Champions of Regnum > Español > La Taberna

La Taberna Un lugar para conversar sobre casi cualquier tema

Reply
 
Thread Tools Display Modes
Old 12-17-2007, 04:15 PM   #1
Daggy
Baron
 
Daggy's Avatar
 
Join Date: Mar 2006
Posts: 609
Daggy is on a distinguished road
Default Tarea para el Hogar (Shell Script)

a ver si los grosos de linux se prenden con esta tarea que tengo asignada y no la puedo terminar de descular

tengo que hacer un script que tome un archivo y remplece todos los Tab del mismo por una cierta cantidad de espacios

si los espacios fueran siempre la misma cantidad no habria problemas
pero ete aqui que la cantidad de espacios al igual que el archivo los elije el usuario

Le mando el escript que hice hasta el momento , que falla en la cantidad de espacios, o sea de la forma que esta escrito remplaza los Tab por un espacio, pero necesitaria que tome la eleccion del usuario

Script hasta el momento:

#!/bin/sh

echo "escriba el nombre del archivo al que le desea aplicar el escript"
read Archivo
echo "Indique el numero de espacios con los que remplazara cada Tab"
read Espacio

sed -r 's/\t/ /g' < $HOME/$Archivo >> $HOME/ArchivoTemp

mv $HOME/ArchivoTemp $HOME/$Archivo



Nota: no debo usar el camando format
Saludos y gracias por cualquier ayuda
__________________
Daggy Alturian Tirador ---> PT For Ever
Laggy Alturian Barbaro ---> Even more PT

Daggy no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 04:29 PM   #2
Sayos
Banned
 
Sayos's Avatar
 
Join Date: Mar 2006
Location: Jugando al rol?... nop...ReTiReD FoReVeR
Posts: 1,080
Sayos will become famous soon enough
Default

Hola Daggy!!!!!!!
Sayos no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 04:31 PM   #3
arlick
Duke
 
arlick's Avatar
 
Join Date: Jan 2007
Posts: 3,939
arlick is a jewel in the rougharlick is a jewel in the rougharlick is a jewel in the rough
Default

cagarruta:

Code:
#!/bin/sh

echo "primer argumento: $1";
echo "segundo argumento: $2";
echo "tercer argumento: $3";
chmod +x cagarruta
./cagarruta lero leri larara

primer argumento: lero
segundo argumento: leri
tercer argumento: larara

edit: creo que me he liado, debe ser que lo escriba duranta la ejecución del script?
__________________
"Nunca un científico ha quemado a un religioso por afirmar a Dios sin pruebas". Manuel Toharia
"uno empieza a darse cuenta que eso de no hacer ejercicio, comer y beber como si fuese la ultima cena y mantener la figura ya no existe...". Maryan

Last edited by arlick; 12-17-2007 at 06:30 PM.
arlick no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 04:39 PM   #4
arlick
Duke
 
arlick's Avatar
 
Join Date: Jan 2007
Posts: 3,939
arlick is a jewel in the rougharlick is a jewel in the rougharlick is a jewel in the rough
Default

aca lo tienes

http://snippets.dzone.com/posts/show/3143

Luego faltaría lo de que si no es número que pidiese de nuevo que lo introdujese y para meterle X espacios hacer un for y meta tantos espacios como es la varible, y al final quitar el tabulador.

Si no se puede hacer así una forma alternativa es por cada vez que lea un tabulador escribir espacio+tabulador. En la última iteración escribes solo espacio o bien después de todas las interaciones sustituyes tabulador por espacio nulo.

Nuse si te servirá así
__________________
"Nunca un científico ha quemado a un religioso por afirmar a Dios sin pruebas". Manuel Toharia
"uno empieza a darse cuenta que eso de no hacer ejercicio, comer y beber como si fuese la ultima cena y mantener la figura ya no existe...". Maryan
arlick no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 06:15 PM   #5
Daggy
Baron
 
Daggy's Avatar
 
Join Date: Mar 2006
Posts: 609
Daggy is on a distinguished road
Default

Quote:
Originally Posted by Sayos
Hola Daggy!!!!!!!
Hola Sy

como va??
__________________
Daggy Alturian Tirador ---> PT For Ever
Laggy Alturian Barbaro ---> Even more PT

Daggy no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 06:16 PM   #6
arlick
Duke
 
arlick's Avatar
 
Join Date: Jan 2007
Posts: 3,939
arlick is a jewel in the rougharlick is a jewel in the rougharlick is a jewel in the rough
Default

Ahí lo tienes, me debes una :P

Code:
#!/bin/sh

echo "escriba el nombre del archivo al que le desea aplicar el escript"
read Archivo

#Control para que repita la pregunta si no introduce un número.

while :
do
        echo "Indique el numero de espacios con los que remplazara cada Tab"
        read Espacio

        if [ $Espacio -eq $Espacio 2> /dev/null ]; then
                break;
        fi
done

#Iniciando las operaciones. El fichero operara en la carpeta /tmp/ y sobreescribirá el fichero original al final.

cp $HOME/$Archivo /tmp/$Archivo"0";

#Por cada iteración escribe una tabulación+espacio por cada tabulación, hasta el número indicado -1.
#Una vez que llega a la iteración número indicado -1 sale del bucle y realiza otra operación sobreescribiendo
#Las tabulaciones restantes por un espacio.

for ((  i = 0 ;  i < $Espacio-1;  i++  ))
do
        sed -r 's/\t/\t /' < /tmp/$Archivo"0" > /tmp/$Archivo"2";
        cp /tmp/$Archivo"2" /tmp/$Archivo"0";
done

sed -r 's/\t/ /' < /tmp/$Archivo"0" > /tmp/$Archivo"2";

#Sobreescribe el fichero original por el generado y elimina los archivos temporales utilzados.

#cat /tmp/$Archivo"2";
cp /tmp/$Archivo"2" $HOME/$Archivo;
rm -f /tmp/$Archivo*;
hoy tengo la tarde aburrida...
__________________
"Nunca un científico ha quemado a un religioso por afirmar a Dios sin pruebas". Manuel Toharia
"uno empieza a darse cuenta que eso de no hacer ejercicio, comer y beber como si fuese la ultima cena y mantener la figura ya no existe...". Maryan
arlick no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 06:23 PM   #7
Daggy
Baron
 
Daggy's Avatar
 
Join Date: Mar 2006
Posts: 609
Daggy is on a distinguished road
Default

Quote:
Originally Posted by arlick
aca lo tienes

http://snippets.dzone.com/posts/show/3143

Luego faltaría lo de que si no es número que pidiese de nuevo que lo introdujese y para meterle X espacios hacer un for y meta tantos espacios como es la varible, y al final quitar el tabulador.

Si no se puede hacer así una forma alternativa es por cada vez que lea un tabulador escribir espacio+tabulador. En la última iteración escribes solo espacio o bien después de todas las interaciones sustituyes tabulador por espacio nulo.

Nuse si te servirá así
Entre lo que habia pensado, estaba lo de hacer un for para pasar del numero que tipea el usario a la cantidad de espacios a remplazar en el Tab

me parece que no va a quedar otra que hacerlo asi
Dudo que haya una forma mas simple, o sea alguna funcion que directamente tome el numero y lo transforme en espacios

Saludos!! Gracias
__________________
Daggy Alturian Tirador ---> PT For Ever
Laggy Alturian Barbaro ---> Even more PT

Daggy no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 06:25 PM   #8
Daggy
Baron
 
Daggy's Avatar
 
Join Date: Mar 2006
Posts: 609
Daggy is on a distinguished road
Default

Quote:
Originally Posted by arlick
Ahí lo tienes, me debes una :P

Code:
#!/bin/sh

echo "escriba el nombre del archivo al que le desea aplicar el escript"
read Archivo

#Control para que repita la pregunta si no introduce un número.

while :
do
        echo "Indique el numero de espacios con los que remplazara cada Tab"
        read Espacio

        if [ $Espacio -eq $Espacio 2> /dev/null ]; then
                break;
        fi
done

#Iniciando las operaciones. El fichero operara en la carpeta /tmp/ y sobreescribirá el fichero original al final.

cp $HOME/$Archivo /tmp/$Archivo"0";

#Por cada iteración escribe una tabulación+espacio por cada tabulación, hasta el número indicado -1.
#Una vez que llega a la iteración número indicado -1 sale del bucle y realiza otra operación sobreescribiendo
#Las tabulaciones restantes por un espacio.

for ((  i = 0 ;  i < $Espacio-1;  i++  ))
do
        sed -r 's/\t/\t /' < /tmp/$Archivo"0" > /tmp/$Archivo"2";
        cp /tmp/$Archivo"2" /tmp/$Archivo"0";
done

sed -r 's/\t/ /' < /tmp/$Archivo"0" > /tmp/$Archivo"2";

#Sobreescribe el fichero original por el generado y elimina los archivos temporales utilzados.

#cat /tmp/$Archivo"2";
cp /tmp/$Archivo"2" $HOME/$Archivo;
rm -f /tmp/$Archivo*;
hoy tengo la tarde aburrida...
jaja te habia contestado el anterior post y no habia visto este

Muchas gracias

Sos un Groso Sabelo!!!!!

Edit : Te debo el Karma ya que
Necesitas dar reputación a más personas antes de darle reputación a $userinfo[username] de nuevo.
jajaja
__________________
Daggy Alturian Tirador ---> PT For Ever
Laggy Alturian Barbaro ---> Even more PT

Daggy no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 06:33 PM   #9
arlick
Duke
 
arlick's Avatar
 
Join Date: Jan 2007
Posts: 3,939
arlick is a jewel in the rougharlick is a jewel in the rougharlick is a jewel in the rough
Default

Juaz se me ocurrió una forma más sencilla, que tonto soy >.<

Tal vez sea más eficiente por no tener que estar escribiendo en los ficheros nada más que una vez.

Te creas una varible que contiene tantos espacios como necesitas.

y con una sola línea sustituyes el tabulado por la cadena generada así:

Code:
[...]
cadena_generada="    ";
sed -r 's/\t/$cadena_generada' < /tmp/$Archivo"0" > /tmp/$Archivo"2";
[...]
habría que retocarlo un poco, pero eso te lo dejo a tí
__________________
"Nunca un científico ha quemado a un religioso por afirmar a Dios sin pruebas". Manuel Toharia
"uno empieza a darse cuenta que eso de no hacer ejercicio, comer y beber como si fuese la ultima cena y mantener la figura ya no existe...". Maryan
arlick no ha iniciado sesión   Reply With Quote
Old 12-17-2007, 06:40 PM   #10
Daggy
Baron
 
Daggy's Avatar
 
Join Date: Mar 2006
Posts: 609
Daggy is on a distinguished road
Default

Quote:
Originally Posted by arlick
Juaz se me ocurrió una forma más sencilla, que tonto soy >.<

Tal vez sea más eficiente por no tener que estar escribiendo en los ficheros nada más que una vez.

Te creas una varible que contiene tantos espacios como necesitas.

y con una sola línea sustituyes el tabulado por la cadena generada así:

Code:
[...]
cadena_generada="    ";
sed -r 's/\t/$cadena_generada' < /tmp/$Archivo"0" > /tmp/$Archivo"2";
[...]
habría que retocarlo un poco, pero eso te lo dejo a tí

Si esa esta muy piola
pero no se vale
tengo que tipear si o si un numero X que signifique la cantidad de Espacios
no puedo tipear los espacios directamente

lo que si seria valido creo es generar la cadena con el for
y asi luego si remplezar directamente el archivo, a ver voy a probar
__________________
Daggy Alturian Tirador ---> PT For Ever
Laggy Alturian Barbaro ---> Even more PT

Daggy no ha iniciado sesión   Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 01:06 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
NGD Studios 2002-2024 © All rights reserved