Awk 如何提取较新的版本号?

Awk 如何提取较新的版本号?,awk,Awk,我已经绞尽脑汁想了一段时间如何让这项工作成功: 只需从其他程序(gulp)正在生成的行中提取一次新版本号3.3.1 [14:14:54] Using gulpfile ~/code/ninja-forms-videomail/gulpfile.js [14:14:54] Starting 'bumpVersion'... [14:14:54] Bumped 3.3.0 to 3.3.1 with type: patch [14:14:54] Bumped 3.3.0 to 3.3.1 wi

我已经绞尽脑汁想了一段时间如何让这项工作成功:

只需从其他程序(gulp)正在生成的行中提取一次新版本号
3.3.1

[14:14:54] Using gulpfile ~/code/ninja-forms-videomail/gulpfile.js 
[14:14:54] Starting 'bumpVersion'... 
[14:14:54] Bumped 3.3.0 to 3.3.1 with type: patch 
[14:14:54] Bumped 3.3.0 to 3.3.1 with type: patch 
[14:14:54] Finished 'bumpVersion' after 42 ms
到之后的号码与我有关。想一个类似正则表达式的
to(\d{1,}\.\d{1,}\.\d{1,})
但不知道如何在awk中实现这一点。最终应该是这样的

$ gulp bumpVersion | awk '/to/ ????' <--- what to put here to extract that version number only once?
$gulp bumpVersion | awk'/to/??'
简要说明

  • 匹配($0,/到[0-9]\.[0-9]\.[0-9]/)
    :在“到”之后查找匹配的版本号
  • substr($0,RSTART+3,RLENGTH-3)
    :打印从
    RSTART+3
    开始的子字符串(即版本号),其长度为
    RLENGTH-3
  • a
    设置为标志,如果找到版本,则将其设置为true并停止查找

使用
grep
和regex的替代解决方案

gulp bumpVersion |grep -oP -m1 'Bumped\s\d+.\d+.\d+\sto\s\K[^ ]+'
3.3.1
\d
:表示单个数字。
\d+
:表示至少一个或多个数字。
\s
:表示空格字符。
\K
:匹配左侧的所有内容,但不打印。

-m1
:打印一个匹配项后使grep停止

只需退出而不是设置标志并继续读取文件-
awk'match($0,/to[0-9]\.[0-9]\.[0-9]/){print substr($0,RSTART+3,RLENGTH-3);退出}
当数字超过两位数时,似乎更合适的选项regex会失败。
gulp bumpVersion |grep -oP -m1 'Bumped\s\d+.\d+.\d+\sto\s\K[^ ]+'
3.3.1