我试图在 debian 档案中查找 libdb 的版本,如下所示:
$ aptitude search '~S~ndev$(~nlibdb~(\d~|-~)!~v~rnative)'
它没有按预期工作,所以我将“数字或破折号”的搜索模式更改为(格式错误?)括号模式
$ aptitude search '~S~ndev$(~nlibdb[[:digit:]-]!~v~rnative)'
哪个完成了这项工作。
对引擎盖下的引擎感到好奇,我尝试反向引用
$ aptitude search '~n~([[:digit:]]~)\1\>~rnative'
这也起作用并让我得出结论:它一定是 GNU ERE。
所以我现在有两个问题:
- aptitude 使用 GNU ERE 吗?
- 有没有办法获得接受 PCRE 的能力?
我希望有人能为我澄清这一点。
答案1
嗯,man aptitude
充满了这样的行:
(请参阅 aptitude 参考手册中的“搜索模式”部分)
我的 Debian 的手册页中没有这样的部分,我也无法在该info
页面中找到它(它只给了我相同的手册页)。谷歌搜索发现这,这解释了
大多数文本搜索(包名称、描述等)都是使用不区分大小写的正则表达式执行的。这意味着您必须在搜索中对正则表达式元字符 [12] 进行反斜杠转义(例如,要查找“g++”,您应该使用模式“g\+\+”)。
[12] 正则表达式元字符包括:“+”、“-”、“.”、“(”、“)”、“|”、“[”、“]”、“^”、“$”和“ ?”。请注意,其中一些也是 aptitude 元字符,因此如果您想键入(例如)文字“|”,则必须对其进行双重转义:“\~|”。
“正则表达式”是指向名为 的页面的损坏链接tao_regexps
。
答案2
出什么问题了:
aptitude search '?version(CURRENT) ^libdb[1-9] ! -'
根据需要尽可能简单和复杂。
此致