regexp e pacchetti slackware - aiutatemi vi prego!!! :)
Inviato: sab 24 mag 2008, 15:43
Ciao a tutti,
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:
mentre io vorrei che mi restituisse una cosa del genere:
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:
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
ma quando ne devo mettere 2 in fila devo usare 2 istanze di sed in questo modo:
???
Spero saprete aiutarmi, grazie mille a tutti...
Ciau
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
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
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'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'Codice: Seleziona tutto
bla bla bla |sed 'miaRegExp' |sed 'altraRegExp'Spero saprete aiutarmi, grazie mille a tutti...
Ciau