Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] Riconoscere nome completo da nome corto

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda ulisse89 » ven feb 19, 2010 20:12

in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio

Potrei basarmi su una lista di tutte quelle possibili. Dove potrei reperirle?
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda conraid » ven feb 19, 2010 20:16

ulisse89 ha scritto:
in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio

Potrei basarmi su una lista di tutte quelle possibili. Dove potrei reperirle?


boh

naturalmente se ti basi sui porting ufficiali di slackware allora sono quelle menzionate prima, più s390 e arm
se poi vuoi che il tuo script funzioni anche in distribuzioni non ufficiali, che ne so tipo slamd64, allora devi vedere ogni distribuzione cosa utilizza
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12002
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda d4z_c0nf » ven feb 19, 2010 20:17

conraid ha scritto:in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio


Sì ma siccome sono specifiche per l'architettura, potresti metterle in una variabile.
Nel senso se tu usi una i*86 di sicuro non avrai pacchetti del tipo x86_64 o arm, puoi però avere noarch.
Poi se magari cambi architettura e vuoi portarti con te lo script cambi solo la variabile.
Una variabile del tipo ARCH="i.86|noarch", ad esempio.
Volendo potresti avere una versione che abbia un numero di release maggiore di 9, allora a quel punto aumentando le cifre
[0-9] diventa [0-9]+.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda ulisse89 » ven feb 19, 2010 20:26

Sì, potrei fare una variabile che rappresenta l'architettura.
Per la questione del numero di release che può essere maggiore di 9 ho notato che :
Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9].*$"

matcha, anche se non dovrebbe.
Infatti la parte "-[0-9].*$" vuol dire che cerca dopo il trattino finale, una sola cifra da 0 a 9 e un set di caratteri di qualsiasi dimensione fino alla fine.

EDIT: Ho capito: al posto del punto che matcha tutti i caratteri comprese le cifre dovrei mettere un [a-z]. Verrebbe:
Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$"

Giusto?
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda d4z_c0nf » ven feb 19, 2010 20:32

ulisse89 ha scritto:Sì, potrei fare una variabile che rappresenta l'architettura.
Per la questione del numero di release che può essere maggiore di 9 ho notato che :
Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9].*$"

matcha, anche se non dovrebbe.
Infatti la parte "-[0-9].*$" vuol dire che cerca dopo il trattino finale, una sola cifra da 0 a 9 e un set di caratteri di qualsiasi dimensione fino alla fine.

EDIT: Ho capito: al posto del punto che matcha tutti i caratteri comprese le cifre dovrei mettere un [a-z]. Verrebbe:
Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$"

Giusto?


Giusto. Ma se ci pensi anche inutile, perchè in quel caso che ci sia +[a-z]* o solo .*, visto quello che ti serve, è uguale.
Io prima intendevo, sbagliando perchè funzionava comunque, una maggiore "coerenza" della reg-ex.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda ulisse89 » ven feb 19, 2010 20:37

@d4z_c0nf :
Se metto ".*" allora matcha anche se viene passato il nome corto "qwerty-noarch-sl". Lo so che è surreale che un programma abbia "noarch" come parte del nome, ma è teoricamente possibile.
In questo caso il nome del pacchetto è passato in forma breve (cioè solo il nome del programma), mentre viene riconosciuto come nome completo.
Sempre sotto questo punto di vista anche "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$" non va bene. Supponendo che un pacchetto si chiami "ntfs-noarch-3g", passa come nome completo.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda d4z_c0nf » ven feb 19, 2010 20:46

ulisse89 ha scritto:@d4z_c0nf :
Se metto ".*" allora matcha anche se viene passato il nome corto "qwerty-noarch-sl". Lo so che è surreale che un programma abbia "noarch" come parte del nome, ma è teoricamente possibile.
In questo caso il nome del pacchetto è passato in forma breve (cioè solo il nome del programma), mentre viene riconosciuto come nome completo.


No aspè intendevo, da qui:
"-[0-9]+[a-z]*$"
se metti .* al posto di +[a-z]*
Non matcha quella stringa che hai detto.
Al massimo può matchare qualcosa del tipo qwerty-noarch-1sl, nel caso esistesse.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda ulisse89 » ven feb 19, 2010 20:50

Sì diciamo che ho risolto. Nel caso in cui qualche programmatore sviluppi il software "ntfs-noarch-3g", lo vado a prendere a casa. :evil:
Comunque la soluzione trovata va più che bene, grazie a tutti.
Se qualcuno avesse un lampo di genio per qualcosa di più universale e preciso, si faccia avanti.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda targzeta » ven feb 19, 2010 20:55

Visti gli esempi che riportate, la soluzione proposta nel thread che hai scovato secondo me potrebbe funzionare, con qualche modifica. O ancora non ho capito cosa chiedi?

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6156
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda albatrosla » ven feb 19, 2010 22:34

Ulisse89, la mia soluzione non ti piace? Isola il solo nome, qualsiasi sia la sua "lunghezza" o il suo "frazionamento", e non fa troppo lo schizzinoso con le arch e le revisioni. Guardandola la correggo in:
Codice: Seleziona tutto
echo nome_package | sed "s/\(-[^-]\{1,\}\)\{3\}$//"

Più corretta. In pratica cancella dalla stringa gli ultimi tre campi separati da "-" e costituiti da caratteri che non siano "-". Funziona qualsiasi sia il nome del package. Provare per credere:
Codice: Seleziona tutto
echo ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1|sed "s/\(-[^-]\{1,\}\)\{3\}$//"
albatrosla
Packager
Packager
 
Messaggi: 1294
Iscritto il: sab mar 27, 2004 0:00
Località: Bressa - Friuli / Torino
Slackware: current
Desktop: fluxbox.git

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda conraid » ven feb 19, 2010 22:39

@spina
@albatrosla

secondo me lui non cerca quello, nel senso che non cerca di trovare il nome dato il pacchetto

mi spiego
lui non ha
ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1
da cui ricavare
ntfs-3g-extreme-score

lui ha per esempio
ntfs-3g-extreme-score
e vuole sapere se è completo o no
come fareste con questo metodo?

se poi ho capito male io, i'm sorry
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12002
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda targzeta » ven feb 19, 2010 23:03

Ecco, albatrosla ha fatto quello che intendevo io. Secondo me è il miglior modo per ottenere quello che si vuole. Ovviamente se sed non modifica la stringa in input allora il nome non è completo :).

Questo ad esempio dovrebbe andar bene:
Codice: Seleziona tutto
[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo  NOMECORTO || echo NOMECOMPLETO


Nota che in questo modo, se PACKAGE si riferisce ad un pacchetto, l'output di sed è proprio il nome del pacchetto, due piccioni con una fava,
Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6156
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda d4z_c0nf » ven feb 19, 2010 23:54

spina ha scritto:Ecco, albatrosla ha fatto quello che intendevo io. Secondo me è il miglior modo per ottenere quello che si vuole. Ovviamente se sed non modifica la stringa in input allora il nome non è completo :).

Questo ad esempio dovrebbe andar bene:
Codice: Seleziona tutto
[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo  NOMECORTO || echo NOMECOMPLETO


Nota che in questo modo, se PACKAGE si riferisce ad un pacchetto, l'output di sed è proprio il nome del pacchetto, due piccioni con una fava,
Emanuele


L'unica cosa che voglio dire è.. ma perchè non usare le extended (opzione "-r" di sed) così da eliminare tutti quegli escape che rendono faticosa l'intepretazione umana dell'espressione? :D
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda ulisse89 » sab feb 20, 2010 8:38

@ spina a albatrosla: la vostra soluzione mi era sfuggita, scusate.
Però l'ho provata e non funziona. Premettendo che quello che mi serve è quello che ha detto conraid, faccio qualche esempio, prendendo come riferimento la:
Codice: Seleziona tutto
[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo  NOMECORTO || echo NOMECOMPLETO

Con PACKAGE="ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1" --> NOMECOMPLETO (e va bene)
Con PACKAGE="ntfs-3g-extreme-score-number-into-program-name" --> NOMECOMPLETO (e non va bene).

In pratica la vostra soluzione tratta come nome completo ogni nome di pacchetto che ha più di tre "-". Ma un nome di un software può avere anche più di 3 "-".

Per ricavare il nome di un programma dal nome completo del pacchetto, la vostra soluzione è perfetta, infatti me tengo da parte perchè sicuramente mi servirà.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda targzeta » sab feb 20, 2010 11:36

Anche tu non hai tutti i torti. Allora devi raffinare lo script inserendoci altre caratteristiche tipiche di un pacchetto slackware. Ecco un esempio:
Codice: Seleziona tutto
#!/bin/bash
# by Spina
#
# $1 = Nome da controllare

_ARCH='..\?86 noarch'

for arch in $_ARCH
do
    PGRNAME=$(echo $1 | sed "s/-[^-]*-${arch}[^-]*-[0-9][^-]*$//")
    if [ $PGRNAME != $1 ]
    then
        echo "Nome completo per $PGRNAME"
        exit
    fi
done

echo "Nome corto"


Emanuele

P.S. Nota che c'è un 'exit', quindi invoca lo script con 'sh nomescript' se non vuoi che l'exit uccida la shell corrente :)
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6156
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: MSNbot Media e 1 ospite