Ruby oneliners

reverse file lines:

  $ ruby -e 'file.open("foo").each_line { |l| puts l.chop.reverse }'

reverse lines from stdout:

  cat foo | ruby -e 'while s = gets; puts s.chop.reverse; end'

in-place file editing:

  $ cat foo
  qwe
  123
  bar
  $ ruby -i -lpe '$_.reverse!' foo
  $ cat foo
  ewq
  321
  rab

indent every line:

  ruby -ne 'puts " " * 4 + $_' example.rb

Delete all consecutive blank lines from file except the first one in each group:

  ruby -ne 'puts $_ if /^[^\n]/../^$/'

Extract all comments (marked with */…*/):

  ruby -ne 'puts $_ if ($_ =~ /^\/\*/)..($_ =~ /\*\/$/)' comments.txt

Alternative Extract all comments (marked with */…*/):

  ruby -pe 'next unless ($_ =~ /^\/\*/)..($_ =~ /\*\/$/)' comments.txt

Highlight trailing spaces:

  ruby -lpe '$_.gsub! /(\s+)$/, "\e[41m\\1\e[0m"' example.rb

Remove trailing spaces:

  ruby -lpe '$_.rstrip!' example.rb

Highlights with red the part of it that goes over 50 characters:

  ruby -ne 'puts "#{$_}\e[31m#{$_.chop!.slice!(60..-1)}\e[0m"' example.rb
  ruby -e 'w = $*.shift; $<.each { |l| puts "#{l}\e[31m#{l.chop!.slice!(w.to_i..-1)}\e[0m" }' 50 example.rb

See ruby compilation flags

  ruby -r rbconfig -e 'puts RbConfig::CONFIG["configure_args"]'

Print RPM dependencies

  ruby -e 'puts $(rpmdep glibc).split(",")[2..-1]'

Line numbering (per file file):

  ruby -ne '$. = 1 if $<.pos - $_.size == 0; puts "#$. #$_"' foo.rb bar.rb

Count words:

  ruby -ane 'w = (w || 0) + $F.size; END { p w }' exmpl.txt

Line numbering (all files at once):

  ruby -ne 'puts "#$. #$_"' foo.rb bar.rb