it-swarm-ja.com

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/-]*//'

専門家が簡単に提供できるシンプルでエレガントなソリューションがあると確信しています。

3
WilliamKF

私はこれがsedを使用していないことを知っていますが、あなたの出力に基づいてこれはより簡単です。

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

Perlを利用できる場合...

svnversion --version | Perl -lne 'print $1 if /version (\d+.\d+.\d+)/'
6
Darren Hall

これを試して:

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

それは言う:

  • _-n_ ---出力を自動的に出力しません。
  • _/version/_ ---文字列 "version"を含む行
  • _s/_-何の代わりに
  • _.*version_および_.*_ ---[任意の文字の0個以上のシーケンス、文字列「バージョン」、スペース]および[スペース、任意の文字の0個以上のシーケンス]、
  • \(...\)---capturing
  • _[0-9]\+_ ---1桁以上のシーケンス
  • _\._ ---その後にリテラルピリオド
  • その後、さらに多くの桁とピリオド、
  • _/\1/_ ---最初の(この場合のみ)括弧のセットでキャプチャされたもの
  • p---そして明示的に印刷します。

自動印刷が抑制され、「バージョン」を含む行のみが選択されるため、他の行は無視されます。

4

Sedなしでそれを行うもう1つの方法:svnversion --version | head -1 | cut -d" " -f3

1
yanchenko