カテゴリー別アーカイブ: ruby

ruby2.0のインストール時rbenvがBUILD FAILEDになる、そんなとき

Ubuntuにrbenvを使ってruby2.0を入れようと思ったわけです。
OpenSSLがないっぽいと言われBUILD FAILEDになったのですけど、結論から言うとメッセージのとおりで前提のパッケージを諸々入れると良いです。

sudo apt-get install zlib1g-dev build-essential libssl-dev libreadline-dev git

これぐらい入れておけば大丈夫そう。

せっかくなのでインストールの手順を残しておきます。

やり方は以下のリンク先に従えばよくて、まずはrbenvruby-buildをインストールします。

https://github.com/sstephenson/rbenv

#rbenvのインストール
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
echo 'eval "$(rbenv init -)"' >> ~/.profile
exec $SHELL -l

#ruby-buildのインストール
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

利用可能なバージョンの一覧を表示

rbenv install --list

バージョンを一覧から選んでインストール。今回は2.0.0-p247。

rbenv install 2.0.0-p247

ところが前提が足りずにBUILD FAILEDになります。

$ rbenv install 2.0.0-p247
Downloading ruby-2.0.0-p247.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
Installing ruby-2.0.0-p247...

BUILD FAILED

Inspect or clean up the working tree at /tmp/ruby-build.20130730092728.31571
Results logged to /tmp/ruby-build.20130730092728.31571.log

Last 10 log lines:
installing default gems:      /home/skmk/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0 (build_info, cache, doc, gems, specifications)
                              bigdecimal 1.2.0
                              io-console 0.4.2
                              json 1.7.7
                              minitest 4.3.2
                              psych 2.0.0
                              rake 0.9.6
                              rdoc 4.0.0
                              test-unit 2.0.0.0
The Ruby openssl extension was not compiled. Missing the OpenSSL lib?

OpenSSLをインストールしてあるはずなのにOpenSSLがないんじゃない?って言われてます。 実は足りないのはlibssl-devです。

sudo apt-get install libssl-dev

再度インストール

$ rbenv install 2.0.0-p247
Downloading ruby-2.0.0-p247.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
Installing ruby-2.0.0-p247...
Installed ruby-2.0.0-p247 to /home/skmk/.rbenv/versions/2.0.0-p247

rubyを使えるようにします。

rbenv global 2.0.0-p247
rbenv rehash

バージョン確認します。

$ ruby --version
ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]

OK、入った。 この辺に前提条件のパッケージが書かれてるので、入れとくとよいと思います。
https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/requirements/ubuntu

おわり

改行を置換したい

改行を置換したいときのメモだよ。
改行コードCR+LFからCRを取り除くとかいう話ではなくて、改行そのものを置換したいときのメモ。CRは入ってない前提。
コマンドのバージョンとか動作環境によってはうまく動かないこともあるかもしれない。

【例】改行をカンマ’,'に置換する

A
B
C

というファイルを

A,B,C

のように書き換えたいという例でお話しする。


エディタで

Emacs

M-x replace-string Replace string:

のところでC-q C-jと入力すると改行コードを引用できて、コマンド行が改行される。Enterで決定すると

Replace string with ^J with:,

となる。改行は^Jで表されている。置換先のカンマ’,'を入力してEnterで決定すれば、現在行以下の改行がすべてカンマに置換される。

Vim

:%s/\n//g

コロンを押してコマンドモードにして%でファイル全体を指定。
%の代わりに1,$と書いてもよい。1行目から最後の行までという意味。
もし置換ではなく改行削除して行を連結するだけなら、J(Shift+j)を押しっぱなしってのもひとつの手。

コマンドラインで

エディタを開かずにコマンドラインだけで済ませたいときもある。
filename は改行を含むテキストファイル。
標準出力に表示するだけなので、必要があれば > newfilename とかやって新しいファイル名を指定して出力してね。
元と同じファイル名に吐き出して消しちゃうっていうのはやりがちなミスなので気をつけて。

tr

以上は代表的なエディタ上での置換方法だったけど、コマンドラインで済ませたいときはtrがいちばんラクかも。

tr '\n' ',' < filename
あるいは
tr '\012' ',' < filename

改行を削除したいときはーdオプション。

tr -d '\n' < filename
あるいは
tr -d '\012' < filename

awk

awk -F\n -v ORS=','  '{print}'  filename

-Fで区切り文字指定、 -v ORSで出力の区切り文字指定。

sed

sedは1行ごとに処理するのは得意なんだけど、改行をまたぐ処理はわりと面倒くさい。
たとえば上の例とは逆にカンマを改行に変えるのであれば

sed 's/,/\n/g' filename
あるいは
sed 's/,/\        ←バックスラッシュの後で普通にEnterを押す
> /g' filename

でうまくいく。1行目のバックスラッシュのあとに普通に改行ボタン押せば次の行にプロンプトが出るので、続きを入力すればよい。
ところが例題の処理をやろうとして

sed 's/\n/,/g' filename
あるいは
sed 's/\
> /,/g' filename

と書いてもうまくいかないワケ。
じゃあどうするかというと、Nコマンドというのを使えば次の行も読み込めるので、これを最後までループでまわして全体を読み込んでから置換する。

sed ':loop; N; $!b loop; ;s/\n/,/g' filename
あるいは
sed ':loop; N; $!b loop; ;s/\
> /,/g' filename

ただGNUのsedだとうまくいくけど、BSDのsedだとこのやり方でもうまくいかないかも。
[参考]sed の使い方 4.3 改行をすべて削除

Perl

perl -pe 's/\n/,/g' filename

ruby

ruby -pe 'gsub(/\n/,",")'  filename