2009-06-10 14 views
0

単純なテキストファイル./versionにはバージョン番号が含まれています。残念ながら、時にはファイル内のバージョン番号は、末尾のスペースや改行せずにbashの変数にバージョン番号を抽出するための最良の、最も簡単かつ最短の方法です何bashのファイルからバージョン文字列を抽出して切り取る方法

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

のように空白や改行が続いていますか?私は空白のために動作しますがtr -d '\n'を追加するとき、それは動作しません

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

を試してみました。何をすることができます

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

私は混乱している...:

おかげで、 クリス

答えて

0

私はまだ理由を知りませんが、これは働いていたバージョンのファイルを削除して再作成した後、テキストファイルを作成するときに異なるしかし、今は動作します。

+2

スペースと改行を大括弧で囲んでtrを1回呼び出すことでこれを行うことができます:var = $(cat ./version | tr -d '[\ n]') - Dennis Williamson 0 seconds ago [[これを削除コメント] –

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から純粋バージョンが好きです。

Iがあれば、他の文字を削除するためにこの1行コマンドを提供する:

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

抽出バージョン番号は(NO改行またはキャリッジリターン記号)ストリッピング/トリミングされる:

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

私は、より多くの説明を提供し、より洗練された(ただしまだ短い)1行のコマンドをmy other answerに与えます。

関連する問題