【问题标题】:Using grep to compare two lists of Python packages使用 grep 比较两个 Python 包列表
【发布时间】:2017-02-11 04:57:54
【问题描述】:

我想生成 Python 3 中安装的包列表,Python 2.7 中所有包的列表,并在 Python 3 列表中找到 2.7 列表中的所有条目

生成列表很简单:pip freezepip3.4 freeze

例如,在列表中搜索包同样简单pip freeze | grep "wheel"

但是,如果我想搜索列表之间的交集,或者在这种情况下 non-intersections 我希望使用类似 pip freeze | grep -n pip3.4 freeze

的东西

但是它告诉我,显然是 grep ...is not a file or directory 的参数。我的 shell 脚本已经生锈了,我隐约记得应该有一种简单的方法来执行此操作,而不是将两个列表都通过管道传输到文件?

【问题讨论】:

  • grep -vf <(pip freeze) <(pip3.4 freeze)
  • @123 列出所有不在python3列表中的python2包我认为应该是grep -vf <(pip3.4 freeze) <(pip freeze)
  • @Kenavoz 是的,tbh 我并没有真正阅读这个问题,只是看到了I want to search for intersections between the list

标签: python bash list shell grep


【解决方案1】:

你也可以使用下面的comm命令

comm -12 <(pip freeze) <(pip3.4 freeze)

搜索路口;

grep -f <(pip freeze) <(pip3.4 freeze)

【讨论】:

  • 这仅在安装的包版本匹配时才有效,并且第二个示例将包名称或版本中的 . 视为通配符。 grep -F -x -f &lt;(pip2 freeze | sed 's/==.*//') &lt;(pip3 freeze | sed 's/==.*//') 之类的东西会忽略版本号并仅匹配完整的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
相关资源
最近更新 更多