概要
わざわざ Ruby スクリプトを書かないでも簡単に Ruby を使ってシェルの結果をパースしたりできます
環境
- macOS 11.6.6
- Ruby 3.1.1p18
echo を受け取る
とりえあずシェルの echo した文字列を Ruby の puts でそのまま出力する方法です
echo hoge | ruby -ne 'puts $_'
ポイント
$_
最後に読み込んだ行になります-ne
はこの順番でなければなりません、n は結果を1行ごとに処理するオプションです、具体的には while gets … end で囲まれた状態で実行されています。e オプションは指定された Ruby スクリプトを実行するオプションです
ループさせる
シェルの結果がスペースで区切られた値を Ruby 側の Enumerator に変換して処理する場合などに使えます
echo hoge fuga | ruby -ne '$_.split(" ").each {|s| puts "Hello #{s}" }'
JSON をパースする
シェルの結果が JSON の場合に Ruby 側で受け取ってハッシュに変換して処理します
echo '{"name":"hawk","age":10}' | ruby -ne 'require "json"; JSON.parse($_).each {|k,v| puts "#{k} => #{v}" }'
もしくは -r オプションを使って require できます
echo '{"name":"hawk","age":10}' | ruby -rjson -ne 'JSON.parse($_).each {|k,v| puts "#{k} => #{v}" }'
最後に
慣れれば結構便利に使えます
そもそも ruby がインストールされていないケースが多いのでそこが何ともですが
0 件のコメント:
コメントを投稿