grep 的多个输入

grep 的多个输入

是否可以在 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

相关内容