3

我有一个包含以下内容的文件。我得到了打印版本号的命令。但我需要截断版本文件中的最后一部分

文件规格:

Version: 3.12.0.2

使用的命令:

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

echo $VERSION

电流输出:3.12.0.2

所需输出:3.12.0

4

4 回答 4

9

如果您的 shell 符合 POSIX 标准(它应该是)并且支持参数扩展awk,那么对于这个简单的任务,绝对不需要像等这样的外部工具:sed

$ cat file.spec
Version: 3.12.0.2
$ version=$(<file.spec)
$ version="${version#* }"
$ version="${version%.*}"
$ echo "${version}"
3.12.0
于 2013-04-29T21:02:15.357 回答
4

尝试这个:

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

使用字段分隔符 (-d) 剪切拆分字符串,然后使用 -f 参数选择所需的字段。

于 2013-04-29T18:06:28.883 回答
2

你可以使用这个单一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在一起。

于 2013-04-29T18:04:20.977 回答
1

如果您只 grep 单个文件,-r则没有任何意义。

还基于命令行的输出,这个 grep 应该可以工作:

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

给你:

3.12.0

\K也不错。用于固定/非固定长度的后视。(自 PCRE 7.2 起)。关于它还有另一个答案。但我觉得如果固定长度,后视更容易阅读。

于 2013-04-29T18:59:52.827 回答