Apt, expresiones regulares y apt-pattern

Brevísima entrada para comentar un cambio importante en el funcionamiento de apt a partir de la versión 1.9.6:

apt (1.9.6) experimental; urgency=medium

apt(8) no longer treats package names passed as regular expressions or fnmatch expressions, requiring the use of patterns (apt-patterns(5)) to perform complex searches. For ease of use, regular expressions starting with ^ or ending with $ continue to work.

This fixes the problem where e.g. g++ could mean either “the package g++” or, if there is no g++ package, “all packages containing g”. This change will propagate to apt-* after the release of Debian bullseye.

— Julian Andres Klode [email protected] Wed, 15 Jan 2020 21:45:18 +0100

Que viene a querer decir que cuando hagáis una búsqueda con apt, la cadena de texto ya no se va a interpretar como una expresión regular, salvo que comience por ^ o termine por $. Para realizar búsquedas en los directorios de paquetes utilizando expresiones regulares debemos ceñirnos a las directrices establecidas en apt-patterns:

LOGIC PATTERNS
These patterns provide the basic means to combine other patterns into more complex expressions, as well as ?true and
?false patterns.
?and(PATTERN, PATTERN, …), PATTERN PATTERN …
Selects objects where all specified patterns match.
?false, ~F
Selects nothing.
?not(PATTERN), !PATTERN
Selects objects where PATTERN does not match.
?or(PATTERN, PATTERN, …), PATTERN | PATTERN | …
Selects objects where at least one of the specified patterns match.
?true, ~T
Selects all objects.
(PATTERN)
Selects the same as PATTERN, can be used to work around precedence, for example, (~ramd64|~ri386)~nfoo

NARROWING PATTERNS
?all-versions(PATTERN)
Selects packages where all versions match PATTERN. When matching versions instead, same as PATTERN.
?any-version(PATTERN)
Selects any version where the pattern matches on the version.
For example, while ?and(?version(1),?version(2)) matches a package which has one version containing 1 and one
version containing 2, ?any-version(?and(?version(1),?version(2))) restricts the ?and to act on the same version.
?narrow(PATTERN…)
Selects any version matching all PATTERNs, short for?any-version(?and(PATTERN…)).

PACKAGE PATTERNS
These patterns select specific packages.
?architecture(WILDCARD), ~rWILDCARD
Selects packages matching the specified architecture, which may contain wildcards using any.
?automatic, ~M
Selects packages that were installed automatically.
?broken, ~b
Selects packages that have broken dependencies.
?config-files, ~c
Selects packages that are not fully installed, but have solely residual configuration files left.
?essential, ~E
Selects packages that have Essential: yes set in their control file.
?exact-name(NAME)
Selects packages with the exact specified name.
?garbage, ~g
Selects packages that can be removed automatically.
?installed, ~i
Selects packages that are currently installed.
?name(REGEX), ~nREGEX
Selects packages where the name matches the given regular expression.
?obsolete, ~o
Selects packages that no longer exist in repositories.
?upgradable, ~U
Selects packages that can be upgraded (have a newer candidate).
?virtual, ~v
Selects all virtual packages; that is packages without a version. These exist when they are referenced somewhere
in the archive, for example because something depends on that name.

VERSION PATTERNS
These patterns select specific versions of a package.
?archive(REGEX), ~AREGEX
Selects versions that come from the archive that matches the specified regular expression. Archive, here, means
the values after a= in apt-cache policy.
?origin(REGEX), ~OREGEX
Selects versions that come from the origin that matches the specified regular expression. Origin, here, means the
values after o= in apt-cache policy.
?section(REGEX), ~sREGEX
Selects versions where the section matches the specified regular expression.
?source-package(REGEX), ~eREGEX
Selects versions where the source package name matches the specified regular expression.
?source-version(REGEX)
Selects versions where the source package version matches the specified regular expression.
?version(REGEX), ~VREGEX
Selects versions where the version string matching the specified regular expression.

EXAMPLES
apt remove ?garbage
Remove all packages that are automatically installed and no longer needed – same as apt autoremove
apt purge ?config-files
Purge all packages that only have configuration files left
apt list ‘~i !~M (~slibs|~sperl|~spython)’
List all manually-installed packages in sections matching libs, perl, or python.

Happy apt hacking!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos

  • Responsable David Hernández Martín .
  • Finalidad Moderar los comentarios. Responder las consultas.
  • Legitimación Tu consentimiento.
  • Destinatarios David Hernández Martín.
  • Derechos Acceder, rectificar y suprimir los datos.
  • Información Adicional Puedes consultar la información detallada en el Aviso Legal.