Volver 3DG > Informática y Tecnología > Software > Linux/*NIX
Registrarse FAQ Listar Miembros

Linux/*NIX >  

crees que sabes de bash? a ver si me contestas esta...

Participa en el tema crees que sabes de bash? a ver si me contestas esta... en el foro Linux/*NIX




Responder
 
LinkBack Herramientas Modo de visualización
Viejo 09-02-10, 10:14 AM   #1
Piloto Privado
 
Avatar de ThoRax
 
Registración: Feb 2003
Mensajes: 5,878
crees que sabes de bash? a ver si me contestas esta...

se puede hacer command completiton en bash desde un script?

tengo muchos files cuyo nombre arranca con un substring constante. Tengo que averiguar hasta que posicion de substring es constante, y cuando empieza a cambiar

desde bash se soluciona facilmente haciendo:
$ ls {TAB}

bash me devuelve el substring que siempre es igual.

Necesito hacer esto mismo desde un shell script.

se puede?
__________________
Y dicen que los pinguinos no pueden volar..... Linux DEBIAN & X-Plane
ThoRax está desconectado   Citar mensaje
Viejo 09-02-10, 06:09 PM   #2
--
 
Avatar de Fedcer
 
Registración: Nov 2005
Mensajes: 57
Re: crees que sabes de bash? a ver si me contestas esta...

Me parece que lo estas buscando se logra con 'compgen'.
Por ejemplo, para una lista de los archivos que empiezan con 'a' en el directorio actual:
Código:
compgen -f -X '!a*'
Para mas detalles del comando fijate en la manpage de bash (es un built-in de bash).

EDIT: Perdon, entendi cualquiera. Vos queres que te regrese la parte que es comun a todos no ? No se me ocurre como hacerlo, pero vos exactamente que queres hacer en ese script ? Vos no conoces cual es ese prefijo o no tienen algun patron que puedas matchear con alguna reg-exp ?

Última edición por Fedcer : 09-02-10 el 07:14 PM.
Fedcer está desconectado   Citar mensaje
Viejo 09-02-10, 07:51 PM   #3
Piloto Privado
 
Avatar de ThoRax
 
Registración: Feb 2003
Mensajes: 5,878
Re: crees que sabes de bash? a ver si me contestas esta...

exactamente, quiero que me devuelta el comun a todos sea cual sea
El prefijo tiene un patron pero no es constante.
__________________
Y dicen que los pinguinos no pueden volar..... Linux DEBIAN & X-Plane
ThoRax está desconectado   Citar mensaje
Viejo 09-02-10, 07:56 PM   #4
Totalmente fumado
 
Avatar de khemikal___233
 
Registración: Aug 2005
Mensajes: 825
Re: crees que sabes de bash? a ver si me contestas esta...

Citar:
Mensaje original enviado por ThoRax Ver Mensaje
se puede hacer command completiton en bash desde un script?
que es command completiton? de ultima probaste serverfault.com ?
__________________
Commodore 64 - MOS 6510 1Mhz@1,25Mhz - VIC-II 6569/8569 (16 colores) - 6581/8580 SID (3 canales) - RAM : 64 kB
khemikal___233 está desconectado   Citar mensaje
Viejo 09-02-10, 10:20 PM   #5
@ HIS HD4850
 
Avatar de Cabezon.
 
Registración: Mar 2006
Ubicación: En mi casa...
Mensajes: 2,169
Re: crees que sabes de bash? a ver si me contestas esta...

Citar:
Mensaje original enviado por khemikal___233 Ver Mensaje
que es command completiton? de ultima probaste serverfault.com ?


Es cuando al apretar TAB, te aparecen las opciones posibles/autocompleta con la opción que satisface, ej:
ifcon[TAB] -> ifconfig.

Lo interesante es hacer esto un poco más complejo, digamos:
ifconfig e[TAB] -> te aparecen opciones como eth0, eth1, si tenes varios que comienzan con e, o directamente completa si solo hay uno, ej, eth0.

@ThoRax: No termino de entender, que parte es similar:
CONSTANTExxxx
xxxxCONSTANTEyyyy
(siendo tanto xxxx como yyyy variables).
La constante esta siempre al inicio o puede estar dentro?.

Y que es lo que necesitas devuelto? Una cantidad? los nombres? que parte es constante?
__________________
Powered By:
Intel Q6600 - Gigabyte EP35-DS3L - 2x2GB ST + 2x2GB Mushkin DDR2-800 -
HIS HD4850 - Dell 2007WFP + Dell U2410 - X-Fi Xtreme Music - Hitachi 1TB & Samsung 500GB Sata II -
Pinnacle PCTV110i - Pioneer DVD-RW 111D - Sony DDW685
Cabezon. está desconectado   Citar mensaje
Viejo 09-02-10, 10:38 PM   #6
--
 
Avatar de Fedcer
 
Registración: Nov 2005
Mensajes: 57
Re: crees que sabes de bash? a ver si me contestas esta...

Podrias postear algun ejemplo concreto, porque no veo que queres hacer.
Osea si dentro de la carpeta tenes todos archivos con el mismo prefijo (pues es el unico caso en que te serviria el resultado del tab-completion) para que necesitas saber cual es el prefijo ?

En caso de que realmente necesites del auto-completion, no se me ocurre como usar el built-in de bash. Lo que si es que podes armarte a mano tu propia funcion que lo haga, no deberia ser demasiado complicado. Dentro de un loop haces un 'ls' y el resultado se la pipeas a 'uniq -c -w$i' donde i es un numero que aumentas con cada loop. Cuando la cantidad de archivos devuelta por uniq es mayor a 1, quiere decir que ahi se termino el prefijo comun. Finalmente, sabiendo cuanto mide, extraes la string comun.

Si no entendiste lo que te dije en el parrafo anterior despues si queres despues te posteo codigo. Sin embargo, me parece mejor que postees exactamente que queres hacer, porque me parece que una funcion de auto-completion hecha a mano no sea la mejor opcion.
Fedcer está desconectado   Citar mensaje
Viejo 10-02-10, 09:49 AM   #7
Piloto Privado
 
Avatar de ThoRax
 
Registración: Feb 2003
Mensajes: 5,878
Re: crees que sabes de bash? a ver si me contestas esta...

el tema es asi. La constante varia de proyecto en proyecto (sets de archivos), el largo tambien, pero siempre de mayor o menor largo hay un substring constante al comienzo.

Ejemplos concretos son:

tile-qrst*.png

>cada letra despues de tile- puede variar entre q, r ,s ,t
>la cantidad de letras totales puede variar
>cada letra lo que hace es darle la posicion a la imagen en un cuadrante. a medida que vas hacia el final del string cada letra representa la posicion de la imangen dentro del cuadrante de la anterior letra (mayor zoom)
> los cuadrantes son:
q: cuadrante superior izquierdo
r : cuadrante superior derecho
s : cuadrante inferior derecho
t : cuadrante inferior izquierto
>en este caso en particular todas las imagenes estan dentro del cuadrante tile-qrst... asique todas arrancan con ese prefijo. Pero puede haber otros proyectos que esten dentro de un cuadrante mas chico, como tile -qrrrtsts..... y en este caso el prefijo es otro. tambien constante , pero de otro largo.

La idea de todo esto es mapear cada imagen con una posicion de coordenadas geograficas. Lo que necesito en primera instancia es que una funcion me devuelva las esquinas, es decir los maximos superior derecho e inferior izquierdo , para luego ir mapeando cada imagen con otro archivo que tiene coordenadas geograficas (por cada imagen hay un archivo pero en lugar de llamarse tile-qrstst..... es -54.13243_-60.23023)

se entendio :P ?
__________________
Y dicen que los pinguinos no pueden volar..... Linux DEBIAN & X-Plane
ThoRax está desconectado   Citar mensaje
Viejo 10-02-10, 10:13 AM   #8
Badass
 
Avatar de /* Nacho */
 
Registración: Apr 2005
Ubicación: /\/\/\/\/\/\/\
Mensajes: 3,525
Re: crees que sabes de bash? a ver si me contestas esta...

O sea que estando parado dentro de un directorio, vos tirás este script y te tendría que devolver el string inicial que es común en todos los nombres de los archivos? o entendía cualquiera.
/* Nacho */ está conectado   Citar mensaje
Viejo 10-02-10, 11:30 AM   #9
Piloto Privado
 
Avatar de ThoRax
 
Registración: Feb 2003
Mensajes: 5,878
Re: crees que sabes de bash? a ver si me contestas esta...

si, aproximadamente. igual ese valor lo voy a usar dentro del script para lo que explique mas arriba.
__________________
Y dicen que los pinguinos no pueden volar..... Linux DEBIAN & X-Plane
ThoRax está desconectado   Citar mensaje
Viejo 10-02-10, 11:14 PM   #10
Totalmente fumado
 
Avatar de khemikal___233
 
Registración: Aug 2005
Mensajes: 825
Re: crees que sabes de bash? a ver si me contestas esta...

Citar:
Mensaje original enviado por Cabezon. Ver Mensaje


Es cuando al apretar TAB, te aparecen las opciones posibles/autocompleta con la opción que satisface, ej:
ifcon[TAB] -> ifconfig.

Lo interesante es hacer esto un poco más complejo, digamos:
ifconfig e[TAB] -> te aparecen opciones como eth0, eth1, si tenes varios que comienzan con e, o directamente completa si solo hay uno, ej, eth0.

@ThoRax: No termino de entender, que parte es similar:
CONSTANTExxxx
xxxxCONSTANTEyyyy
(siendo tanto xxxx como yyyy variables).
La constante esta siempre al inicio o puede estar dentro?.

Y que es lo que necesitas devuelto? Una cantidad? los nombres? que parte es constante?
ahh bueno flaco era para poner la carita ?, si lo ponia en castellano me daba cuenta al toque de lo que hablaba

pero en tu idioma te respondo

"sorry"
__________________
Commodore 64 - MOS 6510 1Mhz@1,25Mhz - VIC-II 6569/8569 (16 colores) - 6581/8580 SID (3 canales) - RAM : 64 kB
khemikal___233 está desconectado   Citar mensaje


Responder


Herramientas
Modo de visualización



Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
Copyright 1999-2010 3DG - Desarollado por 3DGLabs