2011-01-07 13 views
0

Ich möchte eine Zeichenkette nehmen, nur die Zahlen analysieren und dann diese Zeichenkette von Zahlen auf stdout drucken. Es muss mit einer Zeile mit dem Schalter ruby -e in der Befehlszeile erfolgen. Es muss eine Zeile sein, weil ich dies als Teil eines AppleScript mit dem do shell script Befehl verwende.Ruby-Befehlszeile mit "-e" wechseln, Problem beim Drucken auf stdout

Hier ist der Code, den ich mit aufkommen:

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

Ich weiß, wird Druck für jede Stelle genannt zu werden. Es ist Freitag und mein Gehirn ist gebraten. :-) Hat jemand irgendwelche Vorschläge?

Vielen Dank!

Antwort

4

Sie nur gsub verwenden:

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

Das ist perfekt. Vielen Dank! –

0

Brauchen Sie nur eine .map drin?

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

Scheint zu tun, was Sie wollen.

(Disclaimer: Ich bin kein Ruby-Programmierer also hier den Punkt verpasst haben!)

1

Sie senden den Block der Methode to_a, das macht nichts mit einem Block. Sie können easly tun:

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

Sie scan verwenden:

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