Comment sélectionner les packages commençant par "mate-" mais ne se terminant pas par "-dev"?

Je veux installer tous les packages MATE,

$ sudo apt-get install '^mate' 

Cependant, il sélectionne trop de packages, et certains packages sont en conflit avec certains packages installés.

Maintenant, je veux les exclure. Une idée?

Pas de surprise, cela ne marchera pas:

 $ sudo apt-get install '^mate && !-dev' 

Ou puis-je simplement laisser apt-get ignorer ces packages en conflit?

Vous pourriez essayer quelque chose comme:

 list="" ; for pkg in $(apt-cache search ^mate | grep -v -- '-dev'); list="$list $pkg" ; done ; sudo apt-get install $list 

Vous ne pouvez transmettre une expression régulière que comme argument à apt-get install .

Vous pouvez faire une expression régulière qui fait ce que vous voulez, mais c'est fastidieux. La négation d'une expression régulière peut être exprimée avec une expression régulière, mais la taille de la regex complémentaire croît exponentiellement avec la taille de l'original en général.

 apt-get install '^mate(.?.?.?|.*([^v]|[^e]v|[^d]ev|[^-]dev))$' 

Vous pouvez utiliser les templates de search d'Aptitude pour générer la list des packages avec une syntaxe semi-décente et transmettre la list résultante à apt-get install ou aptitude install .

 aptitude search '^mate !-dev$' 

J'ai moi-même posé la question moi aussi. J'ai essayé des lookaheads négatifs, mais apt-get ne les a pas compris. J'ai donc cherché une autre façon, d'archiver le même résultat et trouvé la réponse ici. Néanless, puisque la solution choisie utilise grep, vous pouvez utiliser des lookaheads et raccourcir l'expression de serach, en termes d'appels, encore plus:

 apt-cache search '^mate' | grep -P '^mate(?!.*dbg)(?!.*dev).*' 

Et gardez à l'esprit que les packages Mates, comme asortingl, ne commencent pas par un compagnon au début de leur nom. Ils ne le contiennent même pas du tout.