摔跤了一段时间如何完成这项工作:
只想从另一个程序(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?
解决方案欢迎。谢谢!
答案 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停止。