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.
Szat
Linux 1.x
Messaggi: 118 Iscritto il: ven 5 ago 2005, 0:00
Slackware: current
Kernel: linux-2.6.27.7
Desktop: Kde4.2
Distribuzione: Kubuntu
Località: Torino
Messaggio
da Szat » mar 13 gen 2009, 10:57
Ciao ragazzi
ho un problemuccio con slackyd:
se da shell do il comando:
#slackyd -s > file.txt
ottengo come output un file così formattato:
Codice: Seleziona tutto
Searching all: found 1738 packages.
Sorting packages: done.
3ddesktop-0.2.9-i486-2sl.tgz [from slacky]
a2ps-4.13b-i386-2.tgz [from slackware]
a52dec-0.7.4-i486-3sl.tgz [from slacky]
aaa_base-12.2.0-noarch-1.tgz [from slackware]
aaa_elflibs-12.2.0-i486-1.tgz [from slackware]
aaa_terminfo-5.6-noarch-1.tgz [from slackware]
aalib-1.4rc5-i486-2.tgz [from slackware]
abakus-0.91-i486-2as.tgz [from slacky]
acct-6.4pre1-i486-1.tgz [from slackware]
acetoneiso-2.0.3rc1-i686-1as.tgz [from slacky]
acl-2.2.47_1-i486-1.tgz [from slackware]
acpid-1.0.8-i486-2.tgz [from slackware]
acpitool-0.4.7-i486-2bj.tgz [from slacky]
addiktui-1.04-i486-4as.tgz [from slacky]
adesklets-0.6.1-i486-3gal.tgz [from slacky]
[cut altri pacchetti]
zenity-2.24.0-i486-1as.tgz [from slacky]
zhu3d-4.1.8-i686-1as.tgz [from slacky]
zlib-1.2.3-i486-2.tgz [from slackware]
zoo-2.10-i486-1.tgz [from slackware]
zope.interface-3.3.0-i486-2sl.tgz [from slacky]
zsh-4.3.6-i486-1.tgz [from slackware]
Ora con
$cat list.txt | grep tgz > prova.txt
riesco a eliminare le prime 3 righe ma ora vorrei eliminare anche il -*.tgz * in modo da avere solo più il nome del pacchetto
come posso fare?
Grazie in anticipo
targzeta
Iper Master
Messaggi: 6643 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
Messaggio
da targzeta » mar 13 gen 2009, 11:03
Szat ha scritto: ...ma ora vorrei eliminare anche il -*.tgz * in modo da avere solo più il nome del pacchetto...
In italiano, questa frase, che significa? E' difficile aiutarti se non si capisce che vuoi fare
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
Szat
Linux 1.x
Messaggi: 118 Iscritto il: ven 5 ago 2005, 0:00
Slackware: current
Kernel: linux-2.6.27.7
Desktop: Kde4.2
Distribuzione: Kubuntu
Località: Torino
Messaggio
da Szat » mar 13 gen 2009, 11:25
spina ha scritto: In italiano, questa frase, che significa? E' difficile aiutarti se non si capisce che vuoi fare
Spina
Il file è formattato così:
aaa_base-12.2.0-noarch-1.tgz [from slackware]
vorrei che diventasse su solo aaa_base togliendo il -12.2.0-noarch-1.tgz [from slackware]
Si capisce?
danix
Staff
Messaggi: 3289 Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:
Messaggio
da danix » mar 13 gen 2009, 11:36
vado a memoria ma basename dovrebbe tornarti utile, fai il parsing riga per riga e dopo averlo dato in pasto a basename lo fai scrivere in un nuovo file di testo...
danix
danix ha scritto: non sono molto presente sul forum, e di ciò mi scuso con tutti
targzeta
Iper Master
Messaggi: 6643 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
Messaggio
da targzeta » mar 13 gen 2009, 12:02
Szat ha scritto: ...vorrei che diventasse su solo aaa_base togliendo il -12.2.0-noarch-1.tgz [from slackware]
Si capisce?
Ora si
.
Fai attenzione perchè, in generale, il nome del pacchetto non lo trovi eliminando tutto ciò che sta dopo il primo trattino, alcuni pacchetti hanno anche il trattino come parte integrante del nome. Un buon algoritmo parte dalla fine ed elimina '-*' poi di nuovo '-*' e poi ancora '-*'. Con un esempio:
dovrebbe diventare prima:
poi:
ed infine:
Aggiungo anche che non hai bisogno di parsare il file due volte, la prima volta per eliminare le prime tre righe e poi la seconda per eliminare tutto ciò che non ti interessa dal nome del pacchetto. Puoi parsare il file solo una volta ed ottenere in output quello che desideri.
Ora non sono su Slackware, se non ci riesci tu, ti posto una soluzione stasera,
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
conraid
Staff
Messaggi: 13631 Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:
Messaggio
da conraid » mar 13 gen 2009, 12:07
in installpkg c'è questa funzione
Codice: Seleziona tutto
package_name() {
STRING=`basename $1 .tgz`
# Check for old style package name with one segment:
if [ "`echo $STRING | cut -f 1 -d -`" = "`echo $STRING | cut -f 2 -d -`" ]; then
echo $STRING
else # has more than one dash delimited segment
# Count number of segments:
INDEX=1
while [ ! "`echo $STRING | cut -f $INDEX -d -`" = "" ]; do
INDEX=`expr $INDEX + 1`
done
INDEX=`expr $INDEX - 1` # don't include the null value
# If we don't have four segments, return the old-style (or out of spec) package name:
if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then
echo $STRING
else # we have four or more segments, so we'll consider this a new-style name:
NAME=`expr $INDEX - 3`
NAME="`echo $STRING | cut -f 1-$NAME -d -`"
echo $NAME
# cruft for later ;)
#VER=`expr $INDEX - 2`
#VER="`echo $STRING | cut -f $VER -d -`"
#ARCH=`expr $INDEX - 1`
#ARCH="`echo $STRING | cut -f $ARCH -d -`"
#BUILD="`echo $STRING | cut -f $INDEX -d -`"
fi
fi
}
quindi se fossi in te farei uno script così
Codice: Seleziona tutto
STRING=`basename $1 .tgz`
INDEX=1
while [ ! "`echo $STRING | cut -f $INDEX -d -`" = "" ]; do
INDEX=`expr $INDEX + 1`
done
INDEX=`expr $INDEX - 1`
if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then
echo $STRING
else
NAME=`expr $INDEX - 3`
NAME="`echo $STRING | cut -f 1-$NAME -d -`"
echo $NAME
fi
chiamato come vuoi, per esempio nomepkg.sh
da richiamare con
quindi per esempio
Codice: Seleziona tutto
$ ./nomepkg.sh zsh-pippo-4.3.6-i486-1.tgz
zsh-pippo
$ ./nomepkg.sh zsh-4.3.6-i486-1.tgz
zsh
puzuma
Linux 2.x
Messaggi: 482 Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:
Messaggio
da puzuma » mar 13 gen 2009, 13:06
conraid ha scritto:
quindi se fossi in te farei uno script così
Codice: Seleziona tutto
STRING=`basename $1 .tgz`
INDEX=1
while [ ! "`echo $STRING | cut -f $INDEX -d -`" = "" ]; do
INDEX=`expr $INDEX + 1`
done
INDEX=`expr $INDEX - 1`
if [ "$INDEX" = "2" -o "$INDEX" = "3" ]; then
echo $STRING
else
NAME=`expr $INDEX - 3`
NAME="`echo $STRING | cut -f 1-$NAME -d -`"
echo $NAME
fi
in realtà basta che fai così:
e ottieni lo stesso risultato
The quiet ones are the ones who change the world. The loud ones only take the credit.
conraid
Staff
Messaggi: 13631 Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:
Messaggio
da conraid » mar 13 gen 2009, 13:33
puzuma ha scritto:
in realtà basta che fai così:
e ottieni lo stesso risultato
Codice: Seleziona tutto
$ cat nome.pkg
echo ${1%%-*}
$ sh nome.pkg zsh-pippo-4.3.6-i486-1.tgz
zsh
e non
zsh-pippo
ho sbagliato qualcosa o intendevi altro?
shark1500
Linux 3.x
Messaggi: 785 Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna
Messaggio
da shark1500 » mar 13 gen 2009, 14:04
Avevo fatto uno script poco fa al volo (per una cosa del genere).
Fregandomene del trattino nel nome del file (ho avuto solo un caso su 80 pacchetti controllati).
Codice: Seleziona tutto
echo aaa_base-12.2.0-noarch-1.tgz | gawk -F'-' '{ print $1 }'
Per farlo con il trattino fai come ha fatto conraid (piu' raffinato sicuramente
)
conraid
Staff
Messaggi: 13631 Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:
Messaggio
da conraid » mar 13 gen 2009, 15:56
shark1500 ha scritto: Per farlo con il trattino fai come ha fatto conraid (piu' raffinato sicuramente
)
L'ha fatto Pat non io
Ho solo tolto delle parti che servono per i vecchi pacchetti
conraid
Staff
Messaggi: 13631 Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:
Messaggio
da conraid » mar 13 gen 2009, 15:58
conraid ha scritto: shark1500 ha scritto: Per farlo con il trattino fai come ha fatto conraid (piu' raffinato sicuramente
)
L'ha fatto Pat non io
Ho solo tolto delle parti che servono per i vecchi pacchetti
Comunque c'è più di un caso, alcuni anche due trattini
Codice: Seleziona tutto
tango-icon-theme-0.8.1-noarch-1
xf86-input-evdev-2.0.8-i486-1
e tutti input etc...
xorg-server-xvfb-1.4.2-i486-1
xorg-sgml-doctools-1.2-noarch-1
sixjan
Linux 2.x
Messaggi: 413 Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10
Messaggio
da sixjan » mar 13 gen 2009, 18:37
Considerando che il nome è sempre il 4° campo contando da destra, si può usare rev:
:~$ echo tango-icon-theme-0.8.1-noarch-1.tgz | rev | cut -f4-10 -d- | rev
tango-icon-theme
Abbondo in -f4-10, così prendo nomi con più trattini. Ciao.
targzeta
Iper Master
Messaggi: 6643 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
Messaggio
da targzeta » mar 13 gen 2009, 20:37
sixjan ha scritto: ...
:~$ echo tango-icon-theme-0.8.1-noarch-1.tgz | rev | cut -f4-10 -d- | rev
tango-icon-theme
Abbondo in -f4-10, così prendo nomi con più trattini. Ciao.
Per essere più corretto dovresti usare '-f4-', in questo modo stai tranquillo qualsiasi siano i trattini nel nome del pacchetto.
Comunque anycolouryoulike ha implementato esattamente quello che volevo fare io. Quindi se l'output di slackyd è nel file
casa , basta fare:
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
sixjan
Linux 2.x
Messaggi: 413 Iscritto il: dom 6 gen 2008, 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10
Messaggio
da sixjan » mer 14 gen 2009, 11:39
spina ha scritto: sixjan ha scritto: ...
:~$ echo tango-icon-theme-0.8.1-noarch-1.tgz | rev | cut -f4-10 -d- | rev
tango-icon-theme
Abbondo in -f4-10, così prendo nomi con più trattini. Ciao.
Per essere più corretto dovresti usare '-f4-', in questo modo stai tranquillo qualsiasi siano i trattini nel nome del pacchetto.
Spina
Sì, vero. Grazie per la correzione. Saluti.