in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio
Potrei basarmi su una lista di tutte quelle possibili. Dove potrei reperirle?
Moderatore: Staff
in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio
ulisse89 ha scritto:in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio
Potrei basarmi su una lista di tutte quelle possibili. Dove potrei reperirle?
conraid ha scritto:in realtà ce ne sono altre
s390 e arm sono due "ufficiali" per esempio
Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9].*$"
Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$"
ulisse89 ha scritto:Sì, potrei fare una variabile che rappresenta l'architettura.
Per la questione del numero di release che può essere maggiore di 9 ho notato che :Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9].*$"
matcha, anche se non dovrebbe.
Infatti la parte "-[0-9].*$" vuol dire che cerca dopo il trattino finale, una sola cifra da 0 a 9 e un set di caratteri di qualsiasi dimensione fino alla fine.
EDIT: Ho capito: al posto del punto che matcha tutti i caratteri comprese le cifre dovrei mettere un [a-z]. Verrebbe:Codice: Seleziona tutto
echo "ciao-2-i686-13" | egrep "\-(i.86|noarch|x86_64)-[0-9]+[a-z]*$"
Giusto?
ulisse89 ha scritto:@d4z_c0nf :
Se metto ".*" allora matcha anche se viene passato il nome corto "qwerty-noarch-sl". Lo so che è surreale che un programma abbia "noarch" come parte del nome, ma è teoricamente possibile.
In questo caso il nome del pacchetto è passato in forma breve (cioè solo il nome del programma), mentre viene riconosciuto come nome completo.
Codice: Seleziona tutto
echo nome_package | sed "s/\(-[^-]\{1,\}\)\{3\}$//"
Codice: Seleziona tutto
echo ntfs-3g-extreme-score-number-into-program-name-2009.4.4-i486-1|sed "s/\(-[^-]\{1,\}\)\{3\}$//"
Codice: Seleziona tutto
[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo NOMECORTO || echo NOMECOMPLETO
spina ha scritto:Ecco, albatrosla ha fatto quello che intendevo io. Secondo me è il miglior modo per ottenere quello che si vuole. Ovviamente se sed non modifica la stringa in input allora il nome non è completo.
Questo ad esempio dovrebbe andar bene:Codice: Seleziona tutto
[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo NOMECORTO || echo NOMECOMPLETO
Nota che in questo modo, se PACKAGE si riferisce ad un pacchetto, l'output di sed è proprio il nome del pacchetto, due piccioni con una fava,
Emanuele
Codice: Seleziona tutto
[ $PACKAGE = $(echo $PACKAGE | sed "s/\(-[^-]\{1,\}\)\{3\}$//") ] && echo NOMECORTO || echo NOMECOMPLETO
Codice: Seleziona tutto
#!/bin/bash
# by Spina
#
# $1 = Nome da controllare
_ARCH='..\?86 noarch'
for arch in $_ARCH
do
PGRNAME=$(echo $1 | sed "s/-[^-]*-${arch}[^-]*-[0-9][^-]*$//")
if [ $PGRNAME != $1 ]
then
echo "Nome completo per $PGRNAME"
exit
fi
done
echo "Nome corto"