STUDIO PLUS TWO ブログ

横浜のウェブエンジニアチーム、STUDIO PLUS TWO(スタジオ・プラスツー)の技術ブログです。https://studioplustwo.jp/

Rubyでワンライナーを書く上で必要となる主なオプションの一覧

簡単な作業を実行したいときに、ワンライナーで手早く処理するケースはそれなりに多く、その際に手慣れた言語を使用できると非常に便利である。

ここでは、 Rubyワンライナーを書くために最低限必要となるオプション一覧をメモしておく。

以下に挙げるオプションさえ覚えておけば、最低限困ることはないはず...?

-e オプション

引数にファイル名を取らずに、引数に与えられた文字列をそのまま Ruby スクリプトとして解釈して実行する。

Rubyワンライナーを書く上で基本となるオプション。

$ ruby -e 'puts "ラーメン"'
ラーメン

-n オプション

標準入力として与えられた文字列の各行に対して Ruby スクリプトを実行する。各行の文字列は $_ 変数に格納される。

$ echo 'ラーメン\nそば\nうどん' | ruby -ne 'puts "カレー" + $_'
カレーラーメン
カレーそば
カレーうどん

-pオプション

スクリプト実行の最後に $_ の値をを標準出力に出力する。それ以外は -n と同じ。

$ echo 'ラーメン\nそば\nうどん' | ruby -pe '$_ = "カレー" + $_'
カレーラーメン
カレーそば
カレーうどん

-a オプション

-n-p と一緒に用いた際に、各行の文字列が split されて $F 配列に格納される。

なお、split メソッドのデフォルトの挙動は「先頭と末尾の空白を除いたうえで、空白文字列で分割する」。

$ echo 'ラーメン そば うどん\nカレー 牛丼 かつ丼' | ruby -ane 'puts $F[1]'
そば
牛丼

-l オプション

行末の自動処理(読み込み時の改行除去、出力時に行末に自動で改行を付与)を行う。

$_変数の末尾に改行が残っていることにより、意図しない結果が出力される場合の回避策として使用できる。

$ echo 'ラーメン\nカレー\nうどん' | ruby -ne 'puts $_ + "野郎"'
ラーメン
野郎
カレー
野郎
うどん
野郎

(↑ 改行が末尾に付いているため、意図しない結果になる)

$ echo 'ラーメン\nカレー\nうどん' | ruby -nle 'puts $_ + "野郎"'
ラーメン野郎
カレー野郎
うどん野郎

-iオプション

-p-nと併用することで、引数として指定されたファイルの内容を置換する。

-i.bak のように拡張子を指定すると、バックアップファイルとして指定拡張子が付いたファイルを作成する。

リポジトリ内の全てのソースコードの変数名を一括置換したり等、活用の場はそれなりに広い。

$ ruby -i.bak -pe '$_.upcase!' hoge.txt
(hoge.txt の中身の英文字を、全て大文字に置換し上書き。hoge.txt.bak というバックアップファイルを作成する。)