我有一个像这样的文件夹中的文件:
installer-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
等variables
你要:
awk -F"-" '{ print $3 }'
用-F
指定分隔符。 在这种情况下, -
。 版本号是第三个字段,所以你需要$3
。
你其实不需要任何外部工具。 你可以在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 ~]$
人们忘记有一个更简单的, cut
。
$ echo "installer-x86_64-XXX.XX-diagnostic.run" | cut -d - -f 3 XXX.XX
尝试:
current_ver=$(find /mnt/builds/current -name '*.run'|grep -Eo '[0-9]+\.[0-9]+')