SED:如何提取版本字符串

SED:如何提取版本字符串

我想使用 sed 从命令中提取版本号:

svnversion --version

输出如下:

svnversion, version 1.6.2 (r37639)
   compiled May 10 2009, 12:41:21

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

经过 sed 处理后,我只想:

1.6.2

到目前为止,我有这个可怕的事情(由于我的无知):

svnversion --version | sed s/[\wa-zA-Z//\(\):,]*//g | sed 's/[ ]//' | sed 's/[ ]//' | sed 's/[ ][0-9 ./n/-]*//'

我相信专家可以轻松提供一个简单而优雅的解决方案。

答案1

我知道这不是使用 sed,但根据您的输出,这更容易。

svnversion --version | head -1 | awk '{print $3}'

如果您有可用的 perl......

svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'

答案2

尝试这个:

svnversion --version | sed -n '/version/ s/.*version \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/p'

它说:

  • -n --- 不要自动打印输出。
  • /version/ --- 在包含字符串“version”的行上,
  • s/-替代什么
  • .*version.* --- 在 [零个或多个任意字符的序列、字符串“version”、空格] 和 [空格、零个或多个任意字符的序列] 之间,
  • \(...\) --- 捕获
  • [0-9]\+ --- 一个或多个数字的序列
  • \. --- 后面跟着一个句号
  • 然后是更多数字和句号,
  • /\1/ --- 第一个(也是本例中唯一一个)括号中捕获的内容
  • p --- 并明确打印它。

由于自动打印被抑制并且仅选择了包含“version”的行,因此其他行将被忽略。

答案3

还有一种不使用 sed 的方法: svnversion --version | head -1 | cut -d" " -f3

相关内容