2022年5月31日火曜日

シェルの結果をパイプを使ってRubyで受け取る方法

シェルの結果をパイプを使ってRubyで受け取る方法

概要

わざわざ 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 件のコメント:

コメントを投稿