2009-06-10 52 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中提供了更多解釋並給出了其他更復雜(但仍然很短)的單行命令。