我正在尝试以易于处理的格式获取已安装软件包的列表,以便自动工具进行解析。
我可以得到这个输出:
/ # apk list -i
WARNING: Ignoring APKINDEX.00740ba1.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.d8b2a6f4.tar.gz: No such file or directory
musl-1.1.22-r2 x86_64 {musl} (MIT) [installed]
zlib-1.2.11-r1 x86_64 {zlib} (zlib) [installed]
apk-tools-2.10.4-r2 x86_64 {apk-tools} (GPL2) [installed]
musl-utils-1.1.22-r2 x86_64 {musl} (MIT BSD GPL2+) [installed]
libssl1.1-1.1.1c-r0 x86_64 {openssl} (OpenSSL) [installed]
alpine-baselayout-3.1.2-r0 x86_64 {alpine-baselayout} (GPL-2.0-only) [installed]
alpine-keys-2.1-r2 x86_64 {alpine-keys} (MIT) [installed]
busybox-1.30.1-r2 x86_64 {busybox} (GPL-2.0) [installed]
scanelf-1.2.3-r0 x86_64 {pax-utils} (GPL-2.0) [installed]
libc-utils-0.7.1-r0 x86_64 {libc-dev} (BSD) [installed]
libtls-standalone-2.9.1-r0 x86_64 {libtls-standalone} (ISC) [installed]
ssl_client-1.30.1-r2 x86_64 {busybox} (GPL-2.0) [installed]
ca-certificates-cacert-20190108-r0 x86_64 {ca-certificates} (MPL-2.0 GPL-2.0-or-later) [installed]
libcrypto1.1-1.1.1c-r0 x86_64 {openssl} (OpenSSL) [installed]
但是,包名称可以包含连字符,版本由连字符分隔,这使得无法可靠地解析此结果。
有没有办法以更易于解析的格式获取此信息?JSON 会很棒,但一个简单的制表符分隔表就可以了。
谢谢!
版本本身不能包含连字符——pkgver 字段总是只有一组,而 pkgrel 总是只有一组。因此,通过将最后两个破折号分隔的组分开,实际上很容易解析;包名是剩下的。
大多数编程语言都可以使用正则表达式或 .rsplit() / .rindex() 等函数来实现。
例如,此 PCRE 正则表达式将匹配所有字段:
要生成类似 JSON 输出的内容,请使用: