是否可以在 Unix grep 上使用多个输入?这是我想做的:
pip freeze
列出所有已安装的 python 包,但不幸的是还列出了它的依赖项
cat requirements/base.txt
列出我的项目包
我一直在尝试使用类似的东西pip freeze | grep $(cat requirements/base.txt)
但没有成功。
有谁知道如何过滤 pip freeze 以实际仅列出我感兴趣的软件包?
答案1
要执行命令,只需在命令替换周围加上双引号。例如,考虑这个base.txt
文件:
$ cat base.txt
simplegeneric==0.8.1
six==1.10.0
sympy==1.1
如果没有引号,该命令会生成一系列错误。使用引号,它工作得很好:
$ pip3 freeze | grep "$(cat base.txt)"
simplegeneric==0.8.1
six==1.10.0
sympy==1.1
更好的是,除非您熟悉正则表达式语法,否则使用该-F
选项可能更安全,以便 grep 将每一行解释base.txt
为纯字符串。在这里没有什么区别,但它可能有助于避免将来出现意外:
$ pip3 freeze | grep -F "$(cat base.txt)"
simplegeneric==0.8.1
six==1.10.0
sympy==1.1
还是更好(帽子提示:纳西尔·莱利),使用该-f
选项从文件中读取字符串,而无需使用cat
:
$ pip3 freeze | grep -Ff base.txt
simplegeneric==0.8.1
six==1.10.0
sympy==1.1