実行オプション
-e script
: 引数で実行スクリプトを指定
$ ruby -e 'puts "hoge"'
hoge
# 複数指定した場合は改行を挟んだとして解釈される
$ ruby -e 'puts "hoge"' -e 'puts "fuga"'
hoge
fuga
-r feature
: requireするライブラリを指定
$ ruby -rpp -e 'pp "a"'
"a"
-n
: while gets
で囲まれているように動作
Kernel.#gets
は読み込んだ結果を$_
にも設定する。
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/gets.html
$ echo "1\n2\n3" | ruby -rpp -ne 'pp $_'
"1\n"
"2\n"
"3\n"
-p
: -n
+ 各ループの最後に$_
を出力
$ echo "1\n2\n3" | ruby -pe '$_="@"+$_'
@1
@2
@3
-l
: 行末の自動処理
printでの出力に改行を付与し、-n
もしくは-p
が指定されている場合はgets
した文字列にString#chomp!
を実行する。
$ echo "1\n2\n3" | ruby -rpp -nle 'pp $_'
"1"
"2"
"3"
-a
: オートスプリットモードを有効化
各ループの先頭で$F = $_.split
を実行する
$ echo "1 2 3\n4 5 6" | ruby -rpp -nae 'pp $F'
["1", "2", "3"]
["4", "5", "6"]
-Fregexp
: 入力フィールドセパレータの変更
String#split
で引数を省略した場合の区切りとして使用される正規表現を指定する
% echo "1, 2, 3\n4, 5, 6" | ruby -rpp '-F\s*,\s*' -nae 'pp $F'
["1", "2", "3\n"]
["4", "5", "6\n"]
-i
: 引数で指定されたファイルを上書き
-i
オプション値に拡張子を指定した場合は、変更元のファイルが拡張子を付けた名前で保存される。
$ echo "hoge" > file
$ ruby -rpp -nle 'pp $_' -i.backup file
$ cat file
"hoge"
$ cat file.backup
hoge
ARGF
引数に指定されたファイルを連結した仮想ファイルを表すオブジェクト。
Kernel.#gets
はARGF#get
が呼ばれている。
https://docs.ruby-lang.org/ja/latest/class/ARGF.html
その他
# ファイル全体を置換
$ ruby -i -e 'print ARGF.read.gsub(/a/, "b")' file
# 一行ごとに置換
$ ruby -i -ple '$_.gsub!(/a/, "b")' file
# awk '{print $1,$2}' file
$ ruby -aple '$_=[$F[0],$F[1]].join(" ")' file