2012-10-25 50 views
3

我有这样一个文件夹中的文件:提取版本号

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

回答

4

你想:

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

随着-F您指定的分隔符。在这种情况下,-。版本号是第三个字段,所以您需要$3

+0

太棒了!谢谢。 –

1

尝试:

current_ver=$(find /mnt/builds/current -name '*.run'|grep -Eo '[0-9]+\.[0-9]+') 
+0

你到底在用grep在这里做什么?你是用[0-9]参数搜索整数吗?什么 - 这么做? –

+1

@AbeedSalam - 阅读关于grep的'-o'选项。它会导致grep只输出匹配的位。可以非常方便,但与'-P'结合使用会更有用(对于preg,这比ERE功能更强大)。请注意,'grep -P'在FreeBSD或OSX中不起作用。对于FreeBSD,你需要安装一个可以给你'pcregrep'的软件包。 – Graham

+0

@AbeedSalam - 是的grep匹配整数围绕一个小数点,所以会拉出100.456例如 – Cez

2

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

$ echo "installer-x86_64-XXX.XX-diagnostic.run" | cut -d - -f 3 
XXX.XX 
+0

这也不错。 – squiguy

+0

那么什么时候使用cut和何时使用awk? –

+0

@AbeedSalam,'cut'完成这个任务,在这种情况下就是分裂线条,而且它做得很对。比如,awk'不仅仅是这个。如果我需要在两者之间进行选择来完成同样的任务,我会使用'cut'并且保持简单 – Alexander

6

实际上您不需要任何外部工具。您可以完全在bash中做到这一点,通过根据图案斩波变量..

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

或者,如果你愿意,你可以砍下件右手边第一:

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

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

[[email protected] ~]$ name="installer-x86_64-XXX.XX-diagnostic.run" 
[[email protected] ~]$ vers=$(awk -F- '{print $3}' <<<"$name") 
[[email protected] ~]$ echo $vers 
XXX.XX 
[[email protected] ~]$ vers=$(sed -ne 's/-[^-]*$//;s/.*-//;p' <<<"$name") 
[[email protected] ~]$ echo $vers 
XXX.XX 
[[email protected] ~]$ vers=$(cut -d- -f3 <<<"$name") 
[[email protected] ~]$ echo $vers 
XXX.XX 
[[email protected] ~]$ 
+1

感谢您的指导。这会派上用场。 –