1

go[^ ]+を使用して、これら2つの文字列の内側を見つけたいですexpr。出力は と に1.17.6なり1.18-becaeea119ます。

go version go1.17.6 linux/amd64
go version devel go1.18-becaeea119 Tue Dec 14 17:43:51 2021 +0000 linux/amd64

ただし、そのdevel部分はオプションであり、 で適切に無視する方法がわかりませんexpr

expr "$(go version)" : ".*go version go\([^ ]*\) .*"
expr "$(go version)" : ".*go version devel go\([^ ]*\) .*"

通常の正規表現を使用すると、私は(?: devel)?それを使用しますが、何らかの理由でexprサポートしていません。?

expr1つのコマンドでこれを達成する方法はありますか?

4

2 に答える 2

0

使用する

.*go version.* go\([^[:space:]]*\) .*

説明

--------------------------------------------------------------------------------
  .*                       any character (0 or more times)
--------------------------------------------------------------------------------
  go version               'go version'
--------------------------------------------------------------------------------
  .*                       any character (0 or more times)
--------------------------------------------------------------------------------
   go                      ' go'
--------------------------------------------------------------------------------
  \(                       group and capture to \1:
--------------------------------------------------------------------------------
    [^[:space:]]*            any character except: whitespace
                             characters (0 or more times)
--------------------------------------------------------------------------------
  \)                       end of \1
--------------------------------------------------------------------------------
                           ' '
--------------------------------------------------------------------------------
  .*                       any character (0 or more times)
于 2022-01-13T22:59:58.560 に答える