我知道有多种方法可以使用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:
...
答案 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 '^.*?\ '