如何从版本字符串中提取版本号部分?

如何从版本字符串中提取版本号部分?

如何从中提取版本号string=customer-asset-tag-1.0.2.9

期望结果:

Component= customer-asset-tag
version number=1.0.2.9

答案1

有很多方法可以做到这一点,例如:

  • bash 和类似的 shell(参见这里了解更多信息)

    $ string=customer-asset-tag-1.0.2.9
    $ echo -e "Component: ${string:0:18}\nVersion: ${string:19}"
    Component: customer-asset-tag
    Version: 1.0.2.9
    
  • awk

    $ echo $string | awk -F- -v OFS=- '{print "Component: "$1,$2,$3; print "Version: "$4}'
    Component: customer-asset-tag
    Version: 1.0.2.9
    

    awk这里,我们将的字段分隔符设置为-(这用于定义字段,第一个字段为$1,第二个字段$2为 等等)。我们还将输出字段分隔符设置为 ,-以便正确打印。

  • perl

    $ echo $string | perl -ne '/(.*)-([^-]+)/; print "Component: $1\nVersion: $2"'
    Component: customer-asset-tag
    Version: 1.0.2.9
    

    这是三种方法中最强大和最通用的,因为它只是寻找最长的非-字符字符串并将其保存为版本,将版本之前的所有内容直到最后一个-保存为组件。

答案2

提取版本号

echo "customer-asset-tag-1.0.2.9"  | sed 's/[a-z-]//g'

Perl 方式实现

echo "customer-asset-tag-1.0.2.9"  | perl -ne  '/([a-z-]*)-([\d+.+]*)/; print "Component= $1\nVersion= $2\n"'

答案3

在终端中使用以下命令,

$ string=customer-asset-tag-1.0.2.9
$ ver=$(echo $string | awk -F- '{print $NF}')
$ Component=${string/-$ver/}
$ echo "version number=$ver"
version number=1.0.2.9
$ echo "Component=$Component"
Component=customer-asset-tag

或者在 shell 脚本中,

#!/bin/bash
string=customer-asset-tag-1.0.2.9
ver=$(echo $string | awk -F- '{print $NF}')
Component=${string/-$ver/}
echo "version number=$ver"
echo "Component=$Component"

答案4

另一个awk命令,

$ string=customer-asset-tag-1.0.2.9
$ echo "Component= "$(echo $string | awk '{print substr($1,1,18)}') && echo "Version number="$(echo $string | awk '{print substr($1,20)}')
Component= customer-asset-tag
Version number=1.0.2.9

描述:

  • echo $string- 显示分配给变量字符串的值。

  • echo $string | awk '{print substr($1,1,18)}'

    • |-标准输出被作为以下命令的输入。

    • substr($1,1,18)- 从输入中取出第一列并仅将从位置 1 到 18 的字符显示到标准输出。

  • echo $string | awk '{print substr($1,20)}'

    • 显示标准输入中第一列从第 20 个位置开始的字符。

awk '{print substr($x,y,z)}'

x - 列号
y - 起始位置
z - 结束位置

相关内容