code: plan9front

ref: a14f9efa6848f167f54dea3e3823b31dae1461c9
dir: /rc/bin/g/

View raw version
#!/bin/rc
rfork e
nl='
'
flags=()
recurse=()
files=()
while(! ~ $#* 1 && ~ $1 -* && ! ~ $1 --){
	if(~ $1 '-n')
		recurse=-n1
	if not
		flags=($flags $1);
	shift
}
if(~ $1 --)
	shift
if(~ $#* 0) {
	echo 'usage: g [flags] pattern [files]' >[1=2]
	exit usage
}
pattern=$1
shift

suffixes='\.([bcChlmsy]|asm|awk|cc|cgi|cpp|cs|go|goc|ha|hs|java|lua|lx|mk|ml|mli|ms|myr|pl|py|rc|sh|tex|xy)$'
fullnames='(^|/)mkfile$'
repodirs='(^|/)(.git|.hg)($|/)'
switch($#*){
case 0
	walk -f $recurse | grep -e $fullnames -e $suffixes >[2]/dev/null
case *
	for(f in $*){
		if(test -d $f)
			walk -f $recurse -- $f \
				| grep -e $fullnames -e $suffixes >[2]/dev/null
		if not
			echo $f
	}
} | grep -v $repodirs | xargs grep -n $flags -- $pattern /dev/null