#!/bin/sh # gvi: grep and vi # usage: gvi pattern [dir] PATH=/usr/local/bin:/bin:/usr/sbin:/usr/bin export PATH tag=`basename $0` tmp=/tmp/$tag.vim.$$ die () { echo "$@" >& 2 exit 1 } case "$EDITOR" in "") for dir in /bin /usr/bin /usr/local/bin do vi=$dir/vi; vim=$dir/vim test -x $vi && EDITOR=$vi && break test -x $vim && EDITOR=$vim && break done ;; *) ;; esac export EDITOR dir='.' case "$#" in 0) echo "usage: $tag pattern [dir]"; exit 1 ;; 1) pattern="$1" ;; *) pattern="$1"; dir="$2" ;; esac test -d "$dir" || die "$dir: no such directory" find . -type f -print | xargs grep -n "$pattern" | awk -v ed=$EDITOR -F: '!/^Binary file / { if ($1 != save) printf "%s +%s %s\n", ed, $2, $1 save = $1 }' > $tmp /bin/sh $tmp exec rm -f $tmp exit 0