Skip to content
Pipeable Ruby - forget about grep / sed / awk / wc ... use pure, readable Ruby!
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin
lib
spec
Gemfile
Gemfile.lock
Rakefile
Readme.md
VERSION
pru.gemspec

Readme.md

Pipeable Ruby - forget about grep / sed / awk / wc ... use pure, readable Ruby!

Install

sudo gem install pru

Working with rvm / many gemsets -> only install once (1.9 recommended)

rvm 1.9.2 exec gem install pru
echo 'alias pru="rvm 1.9.2 exec pru"' >> ~/.bash_profile

Usage

pru supports mapping and reducing.

Map works on each line as String
Reduce works on all lines as Array

something | pru 'map'
something | pru 'map' 'reduce'
something | pru '' 'reduce'
something | pru --reduce 'reduce'

-r, --reduce CODE                reduce via CODE

-I, --libdir DIR                 Add DIR to load path
    --require LIB                Require LIB (also comma-separated)

-h, --help                       Show this.
-v, --version                    Show Version

Examples

# grep --- all lines including foo
ls -al | grep foo
ls -al | pru /foo/

# grep --- all lines including current date
ls -al | grep $(date +"%Y-%m-%d")
ls -al | pru 'include?(Time.now.strftime("%Y-%m-%d"))'

# grep --- all lines including foo but not self
ps -ef | grep foo | grep -v grep
ps -ef | pru 'include?("foo") and not include?("pru")'

# awk --- return second item
ls -al | awk '{print $2}'
ls -al | pru 'split(" ")[1]'

# awk --- count and average of all integers on second position
ls -al | awk '{ s += $2; } END {print "average" ,int(s/NR);print "count ",int(NR)}'
ls -al | pru 'split(" ")[1]' '"average #{mean(&:to_i)}\ncount #{size}"'

# wc --- count lines
ls -al | wc -l
ls -al | pru --reuduce 'size'

# sed -- replace a 5 with five
ls -al | sed 's/5/five/'
ls -al | pru 'gsub(/5/,"five")'

# every second line
ls -al | pru 'i % 2 == 0'

# paste-friendly mime-types
curl https://github.com/mattetti/mimetype-fu/raw/master/lib/mime_types.yml | grep image | pru 'gsub(/(.*): (.*)/, %{"\\1" => "\\2",})'

# number of files by date:
ls -al | pru 'split(" ")[5]' 'grouped.map{|d, f| "#{d} : #{f.size}" }'

# quotes inside a string
something | pru 'include?(%{"string"})'

Authors

Contributors

Michael Grosser
michael@grosser.it
Hereby placed under public domain, do what you want, just do not hold me accountable...

Something went wrong with that request. Please try again.