5

我在这样的文件夹中有一个文件:

安装程序-x86_64-XXX.XX-diagnostic.run

其中 XXX.XX 是版本号,我只需要版本号。如何在Linux中做到这一点?

我有这个代码:

#!/bin/bash
current_ver=$(find /mnt/builds/current -name '*.run'|awk -F/ '{print $NF}')

所以这给了我正确的文件名(减去我不想要的位置)。

但是我如何只将 XXX.XX 版本号放入变量中,例如$version

4

4 回答 4

7

您实际上不需要任何外部工具。您可以完全在 bash 中执行此操作,方法是根据模式切割变量。

[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run"
[ghoti@pc ~]$ vers=${name#*-}; echo $vers
x86_64-XXX.XX-diagnostic.run
[ghoti@pc ~]$ vers=${vers#*-}; echo $vers
XXX.XX-diagnostic.run
[ghoti@pc ~]$ vers=${vers%-*}; echo $vers
XXX.XX
[ghoti@pc ~]$

或者,如果您愿意,您可以先在右侧切块:

[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run"
[ghoti@pc ~]$ vers=${name%-*}; echo $vers
installer-x86_64-XXX.XX
[ghoti@pc ~]$ vers=${vers##*-}; echo $vers
XXX.XX
[ghoti@pc ~]$ 

当然,如果你想使用外部工具,那也没关系。

[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run"
[ghoti@pc ~]$ vers=$(awk -F- '{print $3}' <<<"$name")
[ghoti@pc ~]$ echo $vers
XXX.XX
[ghoti@pc ~]$ vers=$(sed -ne 's/-[^-]*$//;s/.*-//;p' <<<"$name")
[ghoti@pc ~]$ echo $vers
XXX.XX
[ghoti@pc ~]$ vers=$(cut -d- -f3 <<<"$name")
[ghoti@pc ~]$ echo $vers
XXX.XX
[ghoti@pc ~]$ 
于 2012-10-25T23:01:00.580 回答
5

你要:

awk -F"-" '{ print $3 }'

-F您一起指定分隔符。在这种情况下,-。版本号是第三个字段,所以这就是你需要$3.

于 2012-10-25T22:52:55.887 回答
4

尝试:

current_ver=$(find /mnt/builds/current -name '*.run'|grep -Eo '[0-9]+\.[0-9]+')
于 2012-10-25T22:53:32.127 回答
4

人们忘记了还有一个更简单的,cut.

$ echo "installer-x86_64-XXX.XX-diagnostic.run" | cut -d - -f 3
XXX.XX
于 2012-10-25T22:57:02.997 回答