我想使用 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