Aiuto per comandino

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
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

Aiuto per comandino

Messaggio 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

Avatar utente
targzeta
Iper Master
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

Re: Aiuto per comandino

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

Szat
Linux 1.x
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

Re: Aiuto per comandino

Messaggio 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?

Avatar utente
danix
Staff
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:

Re: Aiuto per comandino

Messaggio 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... ;)
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
targzeta
Iper Master
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

Re: Aiuto per comandino

Messaggio 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 :D.

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:

Codice: Seleziona tutto

a52dec-0.7.4-i486-3sl.tgz [from slacky]
dovrebbe diventare prima:

Codice: Seleziona tutto

a52dec-0.7.4-i486
poi:

Codice: Seleziona tutto

a52dec-0.7.4
ed infine:

Codice: Seleziona tutto

a52dec
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

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

Re: Aiuto per comandino

Messaggio 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

Codice: Seleziona tutto

./nomepkg.sh PACCHETTO
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

Avatar utente
puzuma
Linux 2.x
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:

Re: Aiuto per comandino

Messaggio 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ì:

Codice: Seleziona tutto

echo ${1%%-*}
e ottieni lo stesso risultato
The quiet ones are the ones who change the world. The loud ones only take the credit.

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

Re: Aiuto per comandino

Messaggio da conraid »

puzuma ha scritto: in realtà basta che fai così:

Codice: Seleziona tutto

echo ${1%%-*}
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?

Avatar utente
shark1500
Linux 3.x
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

Re: Aiuto per comandino

Messaggio 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 :-))

Avatar utente
anycolouryoulike
Packager
Packager
Messaggi: 1158
Iscritto il: ven 10 ago 2007, 0:00
Slackware: 12.2
Kernel: 2.6.34.8
Desktop: KDE 3.5.10

Re: Aiuto per comandino

Messaggio da anycolouryoulike »

Codice: Seleziona tutto

sed 's/\(.\+\)\(-[^-]\+\)\{3\}\.tgz .*/\1/'

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

Re: Aiuto per comandino

Messaggio 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

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

Re: Aiuto per comandino

Messaggio 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

sixjan
Linux 2.x
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

Re: Aiuto per comandino

Messaggio da sixjan »

Considerando che il nome è sempre il 4° campo contando da destra, si può usare rev:

Codice: Seleziona tutto

#!/bin/bash

echo $1 | rev | cut -f4-10 -d- | 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.

Avatar utente
targzeta
Iper Master
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

Re: Aiuto per comandino

Messaggio 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:

Codice: Seleziona tutto

sed -n '/\.tgz/{s/\(.\+\)\(-.\+\)\{3\}/\1/;p}' casa
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

sixjan
Linux 2.x
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

Re: Aiuto per comandino

Messaggio 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.

Rispondi