如何解决提取字符串的版本号
我正在尝试从看起来像这样的字符串中获取版本号:
[7:38:06 PM] [semantic-release] › ℹ Running semantic-release version 17.1.2
[7:38:09 PM] [semantic-release] › ✔ Published release 1.0.7 on default channel
由于我需要在BusyBox中执行此操作,因此无法将grep
与-P
选项一起使用:
grep -oP 'Published release \K.*? '
所以我尝试使用sed
,但是我的尝试没有返回任何内容:
sed -n 's/.*Published release (.*) .*/\1/p'
此命令出了什么问题?或者有“本机”解决方案来获取1.0.7
?
解决方法
您可以使用Busybox awk:
$ busybox awk '
match($0,/Published release [0-9]+(\.[0-9]+)+/) {
print substr($0,RSTART+18,RLENGTH-18)
}' file
输出:
1.0.7
,
您可以像这样使用sed
:
sed -n 's/.*Published release \([^ ]*\).*/\1/p' file
查看online demo:
s='[7:38:06 PM] [semantic-release] › ℹ Running semantic-release version 17.1.2
[7:38:09 PM] [semantic-release] › ✔ Published release 1.0.7 on default channel'
sed -n 's/.*Published release \([^ ]*\).*/\1/p' <<< "$s"
# => 1.0.7
详细信息
-
-n
-取消默认行输出 -
.*Published release \([^ ]*\).*
-匹配项-
.*
-任意0个或更多字符 -
Published release
-文字 -
\([^ ]*\)
-组1:除空格以外的任何零个或多个字符 -
.*
-任意0个或更多字符
-
-
\1
-替换为第1组的值 -
p
-打印替换结果
如果使用sed,则必须转括号:
sed -n 's/.*Published release \(\[.0-9\]+\).*/\1/'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。