如何awk-extract更新的版本号?

时间:2017-07-12 03:37:28

标签: 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 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?

解决方案欢迎。谢谢!

2 个答案:

答案 0 :(得分:2)

$ gulp bumpVersion | awk '!a{if(match($0,/to [0-9]\.[0-9]\.[0-9]/)){print substr($0,RSTART+3,RLENGTH-3);a=1}}'
3.3.1

简要说明,

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

答案 1 :(得分:1)

使用grep和正则表达式的替代解决方案。

gulp bumpVersion |grep -oP -m1 'Bumped\s\d+.\d+.\d+\sto\s\K[^ ]+'
3.3.1

\d:这意味着一位数 \d+:表示至少有一个或多个数字 \s:表示空格字符 \K:匹配左边的所有内容但不打印它。
-m1:打印一个匹配后使grep停止。