pra*_*tis 2 command-line dpkg awk text-processing
命令
dpkg -l | awk '$2=="ufw" {sub("ubuntu[^[:alpha:]]*$", "", $3); print $3"\t"$2}'
Run Code Online (Sandbox Code Playgroud)
输出:
0.34~rc-0 ufw
Run Code Online (Sandbox Code Playgroud)
现在$2=="ufw",我不想像那样指定包名,而是想迭代并获取所有包的列表,如下所示:
2.20.1-5.1 util-linux
1.0.2-1 zerofree
0.34~rc-0 ufw
Run Code Online (Sandbox Code Playgroud)
编辑
自己犯了一个语法错误。我应该直接使用相同的命令,删除$2=="ufw". 答案是dpkg -l | awk '{sub("ubuntu[^[:alpha:]]*$", "", $3); print $3"\t"$2}'。
您可以告诉dpkg列出特定包的详细信息:
$ dpkg -l util-linux ufw
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-============================================-===========================-===========================-==============================================================================================
ii ufw 0.35-0ubuntu2 all program for managing a Netfilter firewall
ii util-linux 2.27.1-6ubuntu3.1 amd64 miscellaneous system utilities
Run Code Online (Sandbox Code Playgroud)
然后你只需要过滤掉标题。
更容易的是直接使用dpkg-query和设置格式:
$ dpkg-query -W --showformat '${Version}\t${Package}\n' util-linux ufw
0.35-0ubuntu2 ufw
2.27.1-6ubuntu3.1 util-linux
Run Code Online (Sandbox Code Playgroud)
然后,在 中awk,您只需要ubuntu...像当前一样删除该部分,无需任何过滤。