如何在bash中从文件中提取和删除版本字符串

时间:2009-06-10 10:18:32

标签: bash

我有一个包含版本号的简单文本文件./version。不幸的是,有时文件中的版本号后跟空格和新行,如

1.1.3[space][space][newline]
[newline]
[newline]

在没有尾随空格和换行符的情况下,将版本号提取到bash变量中的最佳,最简单和最短的方法是什么?我试过了

var=`cat ./version | tr -d ' '`

适用于空格,但在附加tr -d '\n'时,它不起作用。

谢谢, 克里斯

4 个答案:

答案 0 :(得分:2)

$ echo -e "1.1.1  \n\n" > ./version
$ read var < ./version
$ echo -n "$var" | od -a
0000000   1   .   1   .   1
0000005

答案 1 :(得分:2)

Pure Bash,没有其他过程:

echo -e "1.2.3  \n\n" > .version

version=$(<.version)
version=${version// /}

echo "'$version'"

结果:'1.2.3'

答案 2 :(得分:0)

我仍然不知道为什么,但删除并重新创建版本文件后,这有效:

var=`cat ./version | tr -d ' ' | tr -d '\n'`

我很困惑......在创建文本文件时,您可以做些什么。但是,它现在有效。

答案 3 :(得分:0)

我喜欢中的纯fgm's answer版本。

我提供了这个单行命令来删除其他字符(如果有的话):

perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' 

提取的版本号被修剪/剥离(没有换行符或回车符号):

$> V=$( bash --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )
$> echo "The bash version is '$V'"
The bash version is '4.2.45'

我提供了更多解释,并在中提供了其他更复杂(但仍然很短)的单行my other answer命令。