2009-06-10 53 views
0

我有一个包含版本号的简单文本文件./version。不幸的是,有时文件中的版本号后面的空格和换行像如何从bash中的文件中提取和删除版本字符串

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

什么是提取版本号为一个bash变量没有尾随空格和换行最好的,最简单,最简单的办法?我试图

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

其作品为空格,但附加一个tr -d '\n'当它不工作。

谢谢, 克里斯

回答

0

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

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

我很困惑...你能在创建文本文件时做的不同。但是,它现在起作用了。

+2

您可以通过将空格和换行符放在方括号中,对tr进行一次调用:var = $(cat ./version | tr -d'[\ n]') - Dennis Williamson 0 secs ago [delete this评论] – 2009-06-10 11:23:28

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

纯猛砸,没有其他进程:

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

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

echo "'$version'" 

结果:'1.2.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中提供了更多解释并给出了其他更复杂(但仍然很短)的单行命令。