da circa 3 ore sto giocando con un'espressione regolare per riuscire ad estrarre il nome del programma dal nome completo del pacchetto...
mi spiego meglio, ho uno script che legge il file FILELIST.txt (ad esempio quello che trovate nel repository di slacky) e in base ad una stringa passatagli come argomento effettua una ricerca, il tutto è abbastanza semplice, solo che mi restituisce il pacchetto con tutto il percorso in questo modo:
- Codice: Seleziona tutto
$ ./findpkg mozilla
./multimedia/gnash/0.8.2/gnash-mozilla-plugin-0.8.2-i686-1as.tgz
./multimedia/vlc/0.8.6f/vlc-mozilla-plugin-0.8.6f-i686-1as.tgz
./network/firefox/2.0.0.14/en-us/mozilla-firefox-en-us-2.0.0.14-i686-1sl.tgz
./network/firefox/2.0.0.14/it/mozilla-firefox-it-2.0.0.14-i686-1sl.tgz
./network/thunderbird/2.0.0.14/en-us/mozilla-thunderbird-en-us-2.0.0.14-i686-1sl.tgz
./network/thunderbird/2.0.0.14/it/mozilla-thunderbird-it-2.0.0.14-i686-1sl.tgz
mentre io vorrei che mi restituisse una cosa del genere:
- Codice: Seleziona tutto
$ ./findpkg mozilla
gnash-mozilla-plugin
vlc-mozilla-plugin
mozilla-firefox-en-us
mozilla-firefox-it
mozilla-thunderbird-en-us
mozilla-thunderbird-it
ragionando logicamente ho pensato di partire dalla fine del nome in quanto ho dei campi che sono fissi, ho l'estensione, il build, l'architettura e la versione che devo eliminare, poi devo semplicemente saltare tutto quello che c'è fino ad arrivare alla prima "/" che incontro, e da li posso cancellare tutto... Correggetemi se sbaglio...
Solo che non so come comportarmi perchè ci sono pacchetti che hanno il nome composto da una sola parola, ma ci sono pacchetti (come questi dell'esempio) che hanno il nome con varie parole separate da "-"...
con alcuni pacchetti ero giunto a questa RE:
- Codice: Seleziona tutto
sed 's/-.*.tgz//g'
che ad esempio da "./utilities/kslackysearch/1.1/kslackysearch-1.1-noarch-2dx.tgz" mi restituiva "./utilities/kslackysearch/1.1/kslackysearch".
Per gli esempi sopra però non funziona, perchè del pacchetto "./network/firefox/2.0.0.14/en-us/mozilla-firefox-en-us-2.0.0.14-i686-1sl.tgz" mi restituirebbe solo "./network/firefox/2.0.0.14/en" (relativo alla directory, non al nome del pacchetto...)
Un'altra cosa, usando sed in una pipe, fino a quando uso una sola RE posso fare
- Codice: Seleziona tutto
bla bla bla | sed 'miaRegExp'
ma quando ne devo mettere 2 in fila devo usare 2 istanze di sed in questo modo:
- Codice: Seleziona tutto
bla bla bla |sed 'miaRegExp' |sed 'altraRegExp'
???
Spero saprete aiutarmi, grazie mille a tutti...
Ciau



ciao

) grazie 
