2013-04-29 59 views
0

我有一個包含以下內容的文件。我得到了打印版本號的命令。但我需要的版本文件shell命令截斷/剪切字符串的一部分

file.spec截斷最後部分:使用

Version: 3.12.0.2 

命令:

VERSION=($(grep -r "Version:" /path/file.spec | awk '{print ($2)}')) 

echo $VERSION 

電流輸出:3.12.0.2

所需的輸出:3.12.0

回答

1

試試這個:

VERSION=($(grep -r "Version:" /path/file.spec| awk '{print ($2)}' | cut -d. -f1-3)) 

切分割字符串字段分隔符(-d),那麼您選擇所需的字段-f PARAM。

0

您可以使用這種單一awk腳本awk -F'[ .]' '{print $2"."$3"."$4}'

$ VERSION=$(awk -F'[ .]' '{print $2"."$3"."$4}' /path/file.spec) 

$ echo $VERSION 
3.12.0 

或者這個單一grep

$ VERSION=$(grep -Po 'Version: \K\d+[.]\d+[.]\d' /path/file.spec) 

$ echo $VERSION 
3.12.0 

但你永遠不需要grepawk在一起。

0

如果你只grep單個文件,-r是沒有意義的。

也是基於命令行的輸出,這樣的grep應該工作:

grep -Po '(?<=Version:)(\d+\.){2}\d+' /path/file.spec 

爲您提供:

3.12.0 

\K也不錯。工作於固定/非固定長度的後視。 (自PCRE 7.2)。還有另外一個答案。但如果固定長度,我覺得後視更容易閱讀。

3

有absolutey不需要像awk外部工具,sed等。如果你的shell是POSIX兼容的(這應該是),並支持這個簡單的任務parameter expansion

$ cat file.spec 
Version: 3.12.0.2 
$ version=$(<file.spec) 
$ version="${version#* }" 
$ version="${version%.*}" 
$ echo "${version}" 
3.12.0