Je suis sur un système exécutant une distribution Debian (assez récente).
Je voudrais générer une liste simple de tous les packages installés correspondant à un certain modèle. Je peux le faire en courant, disons,
apt list --installed "linux-image-*" | cut -d/ -f1
mais j'obtiens des lignes qui ne m'intéressent pas, par exemple:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Listing...
Alors peut-être que je ferais mieux de ne pas utiliser apt
. Je peux exécuter dpkg-query comme ceci:
dpkg-query --showformat='${Package}\n' --show "linux-image*"
mais cela ne se limite pas aux packages installés. je pourrais utiliser
dpkg-query --list "linux-image-*" | grep "ii"
mais alors je devrais faire un tas de traitement de texte, et qui peut faire confiance à ces espaces, non?
Donc, en fin de compte: quelle est la bonne façon d'obtenir la liste des packages installés correspondant à un modèle?
Remarque :
- Points bonus s'il peut s'agir d'une expression rationnelle appropriée plutôt que d'un simple glob de shell.
- Devoir analyser le texte semble être une solution loin d'être idéale; si c'est ce que vous suggérez, veuillez expliquer pourquoi il n'y a pas de meilleure façon.
la source
aptitude search
etapt list
dans ce cas ne le font pas.Parler de regex:
Vous pouvez également utiliser
dpkg-query
avec-f
(--showformat) option, lorsqu'elle est appelée sans aucun nom de package par défaut sont listés les paquets uniquement installés.la source
Afin de "piéger" le terme recherché lors de la sortie de grep ping dpkg , vous devez mettre le terme de recherche comme suit. " git " est utilisé comme terme de recherche de spécimen:
Le carat (^) ii suivi de (2) espaces précédant le terme recherché ne garantit rien AVANT que la combinaison de caractères puisse correspondre.
La
[[:space:]]
contiguïté du terme recherché empêche les correspondances partielles de se produire uniquement en faisant correspondre les espaces immédiatement après .la source