我有一個包含以下內容的文件。我得到了打印版本號的命令。但我需要的版本文件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
我有一個包含以下內容的文件。我得到了打印版本號的命令。但我需要的版本文件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
試試這個:
VERSION=($(grep -r "Version:" /path/file.spec| awk '{print ($2)}' | cut -d. -f1-3))
切分割字符串字段分隔符(-d),那麼您選擇所需的字段-f PARAM。
您可以使用這種單一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
但你永遠不需要grep
和awk
在一起。
如果你只grep單個文件,-r
是沒有意義的。
也是基於命令行的輸出,這樣的grep應該工作:
grep -Po '(?<=Version:)(\d+\.){2}\d+' /path/file.spec
爲您提供:
3.12.0
的\K
也不錯。工作於固定/非固定長度的後視。 (自PCRE 7.2)。還有另外一個答案。但如果固定長度,我覺得後視更容易閱讀。
有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