Extrait de motif entre une sous-chaîne et de la première apparition du numérique en une chaîne de caractères

Suivant est le contenu d'un fichier:

xxx_component1-1.0-2-2acd314.xc-linux-x86-64-Release-devel.r
xxx_component2-3.0-1-fg3sdhd.xc-linux-x86-64-Release-devel.r
xxx_component3-1.0-2-3gsjcgd.xc-linux-x86-64-Release-devel.r
xxx_component4-0.0-2-2acd314.xc-linux-x86-64-Release-devel.r

Je veux extraire les noms des composants component1 component2 etc.

C'est ce que j'ai essayé:

for line in `sed -n -e '/^xxx-/p' $file`
do
    comp=`echo $line | sed  -e '/xxx-/,/[0-9]/p'`
    echo "comp - $comp"
done

J'ai aussi essayé sed -e 's/.*xxx-\(.*\)[^0-9].*/\1/'

Ceci est basé sur des infos sur le net. Merci de me donner sed de commande et, si possible, également expliquer progressive

La partie 2. J'ai aussi besoin d'extraire le numéro de version à partir de la chaîne.
numéro de version commence avec les chiffres et se termine avec . suivie par xc-linux.
Comme vous pouvez le voir à maintenir le caractère unique de ses aléatoire des caractères alphanumériques ( la longueur est de 7) en tant que partie du numéro de version.

Par exemple :
xxx_component1-1.0-2-2acd314.xc-linux-x86-64-Release-devel.r
Dans cette chaîne, le numéro de version est : 1.0-2-2acd314

OriginalL'auteur user3662599 | 2014-05-21