Mecanismo regex de aptidão

3

Eu estava tentando pesquisar as versões do libdb nos arquivos do Debian com algo parecido:

$ aptitude search '~S~ndev$(~nlibdb~(\d~|-~)!~v~rnative)'

que não funcionou como esperado, por isso alterei o padrão de pesquisa para "dígito ou traço" para um padrão de parênteses (malformado?)

$ aptitude search '~S~ndev$(~nlibdb[[:digit:]-]!~v~rnative)'

que fez o trabalho.

Curioso sobre o motor sob o capô, eu tentei backreferencing

$ aptitude search '~n~([[:digit:]]~)\>~rnative'

que também funcionou e me levou à conclusão de que deve ser o GNU ERE.

Então eu tenho duas perguntas agora:

  1. O aptitude usa o ERE do GNU?
  2. Existe alguma maneira de o aptitude aceitar os PCREs?

Espero que alguém possa esclarecer isso para mim.

    
por Roger 29.08.2013 / 20:06

2 respostas

2

Bem, man aptitude está cheio de linhas como esta:

(see the section “Search Patterns” in the aptitude reference manual)

Não existe essa seção na página man no meu Debian e nem eu a encontrei na página info (que acabou de me dar a mesma página man). A pesquisa no Google encontrou isto , o que explica que

Most textual searches (for package names, descriptions, etc) are performed using case-insensitive regular expressions. This means that you must backslash-escape regular expression metacharacters [12] in searches (for instance, to find “g++”, you should use the pattern “g\+\+”).

[12] Regular expression metacharacters include: “+”, “-”, “.”, “(”, “)”, “|”, “[”, “]”, “^”, “$”, and “?”. Note that some of these are also aptitude metacharacters, so if you want to type (for instance) a literal “|”, it must be double-escaped: “\~|”.

E "Expressões regulares" são um link quebrado para uma página chamada tao_regexps .

Seja como for, parece que o aptitude está usando Expressões Regulares Básicas POSIX

    
por 29.08.2013 / 20:39
0

O que há de errado com:

aptitude search '?version(CURRENT) ^libdb[1-9] ! -'

O mais simples possível e tão complexo quanto necessário.

Atenciosamente

    
por 29.01.2017 / 09:15