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 Mario Vanoni » ven feb 19, 2010 18:45

cd /var/log/packages
ls | grep '\w' | cut -d '-' -f 1
non vale per grep(1) non GNU
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] Riconoscere nome completo da nome corto

Messaggioda conraid » ven feb 19, 2010 19:05

Paoletta ha scritto: oppure assumere che i nomi degli autori siano contraddistinti da almeno 2 lettere (che di solito succede) e verrebbe:


in realtà i pacchetti Slackware non hanno il campo "autori", solo il numero finale
quelli non Slackware (cioè quelli esterni) possono averlo, ma non esiste regola, ed il team non è che faccia proprio così, guarda i pacchetti di alien, di robby workman o di slackbuilds.org (alien, rlw, SBo) addirittura gli ultimi due con l'underscore prima dell'identificativo
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12024
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 albatrosla » ven feb 19, 2010 19:06

Altrimenti, se vuoi trovare il nome del package, puoi usare questa stringa di sed:
echo filename | sed "s/\(-[a-zA-Z0-9\._]\{1,\}\)\{3\}$//"

Assume che i nomi dei file, le versioni e le revisioni contengano al più i caratteri "a-z", "A-Z", "." e "_". In pratica, elimina gli ultimi 3 campi preceduti dallo score.
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 d4z_c0nf » ven feb 19, 2010 19:06

414N ha scritto:Perché non sfruttare il nome del pacchetto contenuto nello slack-desc all'interno dello stesso?
È già pulito da tutti i fronzoli...
Un esempio;
Codice: Seleziona tutto
DIRTY_NAME=`tar xf package.tgz install/slack-desc -O | egrep  '[:graph:]*: '`

Dovrebbe restituire, a meno di "arruginitura eccessiva" sulla REGEXP, una riga tipo queste (tratte da obconf):
Codice: Seleziona tutto
obconf: obconf (Openbox configuration tool)
obconf: ObConf is a graphical configuration tool for the Openbox
obconf: window manager.
obconf: obconf home: http://icculus.org/openbox/index.php/ObConf:About

Ricavate queste info, una filtrata con cut ed head ed il gioco è fatto:
Codice: Seleziona tutto
NAME=`tar xf package.tgz install/slack-desc -O | egrep  '[:graph:]*: ' | cut -d: -f1 | head -n1`


Il gioco è fatto per fare cosa?
Noi non sappiamo l'utilizzo che ne deve fare ulisse89. Magari hai ragione e vuole estrarre il nome del programma dal pacchetto, ma lui ha chiesto
ulisse89 ha scritto:Mi servirebbe sapere come fare, data una stringa, che rappresenta il nome di un pacchetto (di slackware), come riconoscere se è un nome completo ( xvidcore-1.2.2-i486-2sl) o corto ( xvidcore )


Anche perchè se volesse ricavare il nome dell'applicazione, per come sono fatti i pacchetti slackware e il file desc, potrebbe ricavarlo direttamente dal nomefile.t*z visto che segue una specifica formula.

rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1294
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 19:09

Infatti conraid mi hai preceduto. Stavo per dirlo io. Non avevo specificato all'inzio che il pacchetto può essere "non ufficiale" ma anche "ufficiale", quindi con o senza le lettere finali. Per questo non ci si può basare su questo.
Comunque grazie a tutti ragazzi delle risposte.
Sto controllando ogni soluzione propostami, ci metto un po' perchè sto anche studiando le cose che non so. Per esempio l'esistenza del "+" non la sapevo.
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 ulisse89 » ven feb 19, 2010 19:14

No non devo ricavarne il nome dell'applicazione. Tutt'altro.
Devo solo sapere se quello che mi è stato passato è un nome intero o troncato.

Specifico un po'. Ho una lista di file, in una directory /deps, ognuno dei quali ha come nome il nome di un pacchetto installato e come contenuto la lista delle sue dipendenze. Nomi e dipendenze sono in formato completo.

Il mio programma prende in input un nome di un pacchetto e cerca il file corrispondente in modo da dare in output le sue dipendenze.
Però non so se quello che mi è stato passato è un nome completo o troncato del pacchetto.
Mi serve saperlo perchè la ricerca del file sarà diversa a seconda di cosa mi è stato passato.
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 19:22

ulisse89 ha scritto:No non devo ricavarne il nome dell'applicazione. Tutt'altro.
Devo solo sapere se quello che mi è stato passato è un nome intero o troncato.

Specifico un po'. Ho una lista di file, in una directory /deps, ognuno dei quali ha come nome il nome di un pacchetto installato e come contenuto la lista delle sue dipendenze. Nomi e dipendenze sono in formato completo.

Il mio programma prende in input un nome di un pacchetto e cerca il file corrispondente in modo da dare in output le sue dipendenze.
Però non so se quello che mi è stato passato è un nome completo o troncato del pacchetto.
Mi serve saperlo perchè la ricerca del file sarà diversa a seconda di cosa mi è stato passato.


io farei un if per matchare con tre casi i?86 x86_64 e noarch seguiti da -[0-9].*$

se matcha è un nome completo, altrimenti no

non è ne elegante ne coincisa, ma raggiunge lo scopo :-'
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12024
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 19:23

Devi usare il fatto che i nomi di pacchetti Slackware sono composti da 4 parti, tutte separate da un '-'. Però devi iniziare dalla fine del nome e non dall'inizio. Qui su Slacky qualcuno ha già dato una risposta molto elegante al problema, solo che non ricordo il post. Altrimenti puoi vedere come fa Patrick nei suo script. Sempre se ho capito bene :)

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: 6203
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 conraid » ven feb 19, 2010 19:27

spina ha scritto:Devi usare il fatto che i nomi di pacchetti Slackware sono composti da 4 parti, tutte separate da un '-'. Però devi iniziare dalla fine del nome e non dall'inizio. Qui su Slacky qualcuno ha già dato una risposta molto elegante al problema, solo che non ricordo il post. Altrimenti puoi vedere come fa Patrick nei suo script. Sempre se ho capito bene :)

Emanuele



l'hai data tu, e non fare il furbo :p
anche albatrosla poco più su la data comunque
l'avevo pensato anche io, ma a lui non interessa quello, a lui interessa sapere se è un nome completo o no ;-)
cioè se è un nome completo, o quello che si ricava dal metodo elegante esposto da qualcuno :p

io farei
Codice: Seleziona tutto
echo $PACKAGE | egrep "(i.86|noarch|x86_64)-[0-9].*$"

forse puoi anche togliere [0-9] anche se lo lascerei

tanto per capirsi

p.s.
Pat fa qualcosa tipo
Codice: Seleziona tutto
echo $PACKAGE | rev | cut -d- -f4- | rev

ma non mi sembra nel suo caso serva :-k

UPDATE
ho corretto i?86 con i.86 secondo la giusta osservazione di rock
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12024
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 19:37

Ahaha Spina ma che ce stai "elegantemente" a cojonà? Ahahah.

Corrà, la tua soluzione ci sta tutta, l'unica cosa è che dovrebbe usare "i.86". Perchè "?" serve per matchare 1a o nessuna occorrenza del pattern a cui è applicato, cioè i?86 matcherebbe "i86" o "86", o mi sbaglio? (orribile la coniugazione del verbo inventato "matchare" scusatemi.)

Edit:
Il tuo uso del carattere "?" è valido per la shell, non per le reg-ex, mi sono documentato :P
Ultima modifica di d4z_c0nf il ven feb 19, 2010 19:41, modificato 1 volta in totale.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1294
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 conraid » ven feb 19, 2010 19:40

d4z_c0nf ha scritto:Ahaha Spina ma che ce stai "elegantemente" a cojonà? Ahahah.

Corrà, la tua soluzione ci sta tutta, l'unica cosa è che dovrebbe usare "i.86". Perchè "?" serve per matchare 1a o nessuna occorrenza del pattern a cui è applicato, cioè i?86 matcherebbe "i86" o "86", o mi sbaglio? (orribile la coniugazione del verbo inventato "matchare" scusatemi.)


hai ragione, mi sono confuso con l'espansione shell...

UPDATE
ho visto che hai risposto anche tu, sì mi sono confuso
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12024
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 19:42

No no giuro, non l'ho data io, mi ricordo bene di averla vista da qualcuno e ne ero rimasto colpito perchè mi piaceva molto come soluzione. Per il problema in questione non saprei, come al solito non capisco mai cosa mi si chiede :)

Emanuele

Edit: ah, ricordo anche che quel qualcuno non siete voi :lol:
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: 6203
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 conraid » ven feb 19, 2010 19:45

spina ha scritto: Per il problema in questione non saprei, come al solito non capisco mai cosa mi si chiede :)


anche uno più su :-'

spina ha scritto:Edit: ah, ricordo anche che quel qualcuno non siete voi :lol:


emanuè... ci siamo capiti vero? :-) :P
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12024
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 ulisse89 » ven feb 19, 2010 19:58

Ok conraid e d4z_c0nf, la vostra soluzione funziona sicuro. Il vincolo sta nel fatto che l'architettura deve sempre rimanere una di quelle opzioni. Ma non mi sembra di averne mai viste altre, no?

Mi interesserebbe sapere anche la soluzione che proponeva spina. Più precisa è e più sono contento.

EDIT: Il post è questo viewtopic.php?f=20&t=24701&hilit=regexp
Ma non è più di tanto utile. Sono quasi convinto che verificare solo l'architettura sia la soluzione giusta. Forse era più semplice di quel che pensavo.
Questa per ora funziona sempre:
Codice: Seleziona tutto
egrep "\-(i.86|noarch|x86_64)-[0-9].*$"
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:09

in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12024
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti