[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.
Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da Mario Vanoni »

cd /var/log/packages
ls | grep '\w' | cut -d '-' -f 1
non vale per grep(1) non GNU

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da conraid »

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

albatrosla
Packager
Packager
Messaggi: 1339
Iscritto il: sab 27 mar 2004, 0:00
Slackware: current
Desktop: fluxbox.git
Località: Collegno, but made in Friûl
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da albatrosla »

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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da d4z_c0nf »

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
ulisse89
Packager
Packager
Messaggi: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da ulisse89 »

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: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da ulisse89 »

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
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da conraid »

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
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da targzeta »

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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da conraid »

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
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da d4z_c0nf »

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 19 feb 2010, 19:41, modificato 1 volta in totale.

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da conraid »

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
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da targzeta »

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:
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da conraid »

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
ulisse89
Packager
Packager
Messaggi: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da ulisse89 »

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
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [BASH] Riconoscere nome completo da nome corto

Messaggio da conraid »

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

Rispondi