Wil*_*ton 10 linux alpine-linux
我正在尝试获取已安装软件包的列表,其版本采用易于处理的格式,以便自动化工具进行解析。
我可以得到这个输出:
/ # 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]
Run Code Online (Sandbox Code Playgroud)
但是,包名称可以包含连字符,并且版本由连字符分隔,这使得无法可靠地解析此结果。
有什么方法可以以更易于解析的格式获取此信息吗?JSON 会很棒,但一个简单的制表符分隔表就可以了。
谢谢!
\n\n\n但是,包名称可以包含连字符,并且版本由连字符分隔,这使得无法可靠地解析此结果。
\n
版本本身不能包含连字符 \xe2\x80\x93,pkgver 字段始终只有一组,pkgrel 字段始终只有一组。因此,通过分隔最后两个破折号分隔的组,实际上很容易解析;剩下的就是包名。
\n\n大多数编程语言都可以使用正则表达式或 .rsplit() / .rindex() 等函数来实现此目的。
\n\n例如,此 PCRE 正则表达式将匹配所有字段:
\n\n/(.+)-([^-]+)-r([^-]+) (\\S+) \\{(\\S+)\\} \\((.+?)\\)/\n
Run Code Online (Sandbox Code Playgroud)\n\n要生成类似 JSON 输出的内容,请使用:
\n\napk list -i | perl -MJSON -E 'print encode_json([map {\n @foo{qw(pkgname pkgver pkgrel arch group license)} =\n /(.+)-([^-]+)-r([^-]+) (\\S+) \\{(\\S+)\\} \\((.+?)\\)/;\n \\%foo\n } <>])'\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
13863 次 |
最近记录: |