2011-01-07 12 views
0

文字列を取り出し、数字だけを解析し、その文字列をstdoutに出力したいと思います。コマンドラインでruby -eスイッチを使用して1行で処理する必要があります。 do shell scriptコマンドを使用して、これをapplescriptの一部として使用しているので、1行にする必要があります。"-e"スイッチを使用したrubyコマンドライン、stdoutへの問題印刷

ここに私が思い付いたコードは次のとおりです。

ruby -e '%{303-123-4567}.to_s.chars.to_a {|char| print char if char =~ /\d/}'

は、私はプリントが各桁のために呼び出されている実感します。金曜日、私の脳は揚げられています。 :-)誰にも何か提案がありますか?

ありがとうございました!

答えて

4

は、あなただけのgsubを使用することができます。

$ ruby -e 'print %{303-123-4567}.gsub(/[^\d]/, "")' 
3031234567 
+0

これは完璧です。ありがとうございました! –

0

そこに.mapが必要ですか?

ruby -e '%{303-123-4567}.to_s.chars.to_a.map {|char| print char if char =~ /\d/}' 

あなたが望むことを行うようです。

(免責事項:私はここでのポイントを逃している可能性のRubyプログラマではないんだよ!)

1

あなたがto_aメソッドにブロックを送信しています、ブロックでは何もしません。あなたはイースリー行うことができます:あなたはあまりにもscanを使用することができます

%{303-123-4567}.each_char {|ch| print ch if ch =~ /\d/} 

%{303-123-4567}.scan(/\d/) {|num| print num}