对于pip list vs pip list -o,grep输出不同

时间:2014-11-23 17:13:41

标签: regex grep pip

我知道有多种方法可以使用pip更新过时的软件包,这就是我在这里尝试做的事情。但是,我的问题是这个表达式给出的不同输出取决于我是使用pip list还是pip list -o。我试图只匹配包名本身。

$ pip list | grep -o '^.*\ '
arrow
backports.ssl-match-hostname
bsddb3
bzr
chardet
...
与之形成对比:

$ pip list --outdated| grep -o '^.*\ '
chardet (Current: 2.0.1 Latest:
crypto (Current: 1.0.0 Latest:
fastimport (Current: 0.9.2 Latest:
feedparser (Current: 5.0.1 Latest:
...

1 个答案:

答案 0 :(得分:1)

模式的问题是.*,因为.会尝试匹配包含空格的任何内容,因为我们不打算包含空格。模式的一点变化可以完成工作

$ pip2 list --outdated | grep -o '^[^ ]*'

我们尝试匹配空格以外的任何内容.*而不是尝试匹配任何内容[^ ]*

它的作用是什么?

  • ^将正则表达式固定在字符串的开头

  • [^ ]*匹配空格以外的任何内容,*量化它

<强>测试

$ pip2 list --outdated | grep -o '^[^ ]*'
reportlab
numpy
requests
pyparsing
google-api-python-client
pytz
PyMetis
Django
httplib2

您可以使用非贪婪匹配作为

$ pip list | grep -o '^.*?\ '