shell命令截断/剪切字符串的一部分

时间:2013-04-29 17:50:28

标签: shell awk grep cut

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

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

4 个答案:

答案 0 :(得分:6)

如果您的shell符合POSIX(应该是)并且支持parameter expansion,那么对于这个简单的任务,绝对不需要awksed等外部工具:

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

答案 1 :(得分:3)

试试这个:

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

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

答案 2 :(得分:1)

您可以使用此单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

答案 3 :(得分:1)

如果你只是grep单个文件,-r毫无意义。

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

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

给你:

3.12.0

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