Pagina 1 di 2
Aiuto per comandino
Inviato: mar 13 gen 2009, 10:57
da Szat
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 11:03
da targzeta
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 11:25
da Szat
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?
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 11:36
da danix
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...

Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 12:02
da targzeta
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 12:07
da conraid
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 13:06
da puzuma
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 13:33
da conraid
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?
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 14:04
da shark1500
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

)
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 15:43
da anycolouryoulike
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 15:56
da conraid
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 15:58
da conraid
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
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 18:37
da sixjan
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.
Re: Aiuto per comandino
Inviato: mar 13 gen 2009, 20:37
da targzeta
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
Re: Aiuto per comandino
Inviato: mer 14 gen 2009, 11:39
da sixjan
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.