Awk 如何提取较新的版本号?
我已经绞尽脑汁想了一段时间如何让这项工作成功: 只需从其他程序(gulp)正在生成的行中提取一次新版本号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
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