|
|
La Taberna Un lugar para conversar sobre casi cualquier tema |
|
Thread Tools | Display Modes |
12-17-2007, 04:15 PM | #1 |
Baron
Join Date: Mar 2006
Posts: 609
|
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 |
12-17-2007, 04:29 PM | #2 |
Banned
Join Date: Mar 2006
Location: Jugando al rol?... nop...ReTiReD FoReVeR
Posts: 1,080
|
Hola Daggy!!!!!!!
|
12-17-2007, 04:31 PM | #3 |
Duke
Join Date: Jan 2007
Posts: 3,939
|
cagarruta:
Code:
#!/bin/sh echo "primer argumento: $1"; echo "segundo argumento: $2"; echo "tercer argumento: $3"; ./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. |
12-17-2007, 04:39 PM | #4 |
Duke
Join Date: Jan 2007
Posts: 3,939
|
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 |
12-17-2007, 06:15 PM | #5 | |
Baron
Join Date: Mar 2006
Posts: 609
|
Quote:
como va??
__________________
Daggy Alturian Tirador ---> PT For Ever
Laggy Alturian Barbaro ---> Even more PT |
|
12-17-2007, 06:16 PM | #6 |
Duke
Join Date: Jan 2007
Posts: 3,939
|
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*;
__________________
"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 |
12-17-2007, 06:23 PM | #7 | |
Baron
Join Date: Mar 2006
Posts: 609
|
Quote:
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 |
|
12-17-2007, 06:25 PM | #8 | |
Baron
Join Date: Mar 2006
Posts: 609
|
Quote:
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 |
|
12-17-2007, 06:33 PM | #9 |
Duke
Join Date: Jan 2007
Posts: 3,939
|
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"; [...]
__________________
"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 |
12-17-2007, 06:40 PM | #10 | |
Baron
Join Date: Mar 2006
Posts: 609
|
Quote:
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 |
|
|
|