Hacker News new | past | comments | ask | show | jobs | submit login

I know Perl is no longer fashionable, but it’s still the simplest way to do this sort of ad hoc processing I think.

  ping google.com | perl -ne '/time=(.*)/ && system("say", $1)'
Of course it’s only a little more awkward in Ruby:

  ping google.com | ruby -ne '$_ =~ /time=(.*)/ && system("say", $1)'
(No criticism is intended of your perfectly fine code. I enjoy comparing different ways to do things like this, and perhaps others do too.)



For the sake of comparison, here's the corresponding Python one-liner:

   ping google.com | python -c 'import os,re,sys; [os.system("say %s" % j[0]) for j in  (re.findall("time=(.*)", i) for i in sys.stdin) if j]'
I'm sure someone can come up with a shorter one-liner, but in general I think Python is simply too verbose for this kind of stuff.


Add a delay so say can keep up:

ping -i 5 8.8.8.8 | perl -ne '/time=(.*)/ && system("say", $1)'


In NodeJS (tested on Mac 10.7)

   ping g.cn | node -e "process.stdin.on('data',function(l){require('child_process').exec('say '+/time=([0-9]*)/g.exec(l+'')[1])}).resume()"


On linux I used espeak. ping google.com | ruby -ne '$_ =~ /time=(.*)/ && system("espeak", "-s 120", $1);'




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: