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 番目のフィールドであるため、$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 に答える