我想获得一个不安装的Atom软件包列表,与packages.txt
中存储的固定软件包列表进行比较:
highlight-selected@0.11.1
ruby-block@0.3.5
要获取已安装的软件包列表,我使用apm list --installed --bare
:
highlight-selected@0.11.1
所以,我会得到ruby-block@0.3.5
包,因为那是packages.txt
中列出的并且未安装的包。
我尝试过类似的事情:
apm list --installed --bare | grep -v -f packages.txt
但它不起作用。我应该如何调整命令以达到我的目的?
答案 0 :(得分:2)
-v
打印输入中与模式文件中的任何模式都不匹配的行。您希望文件中的反转线与输入不匹配。实现此目的的方法是切换输入和模式。您还需要从输出中删除任何空行:
grep -v -f <(apm list --installed --bare | sed '/^$/d') packages.txt
例如:
% cat packages.txt
highlight-selected@0.11.1
ruby-block@0.3.5
% cat installed
highlight-selected@0.11.1
% grep -vf installed packages.txt
2:ruby-block@0.3.5
这应该适用于所有的greps; gnu grep应该让你直接使用stdin作为模式文件:
apm list --installed --bare | sed '/^$/d' | grep -v -f - packages.txt
答案 1 :(得分:1)
将管道输出保存为临时文件会更容易,例如使用以下语法:
$ grep -v -f <(apm list --installed --bare) packages.txt