#!/bin/rc # igrep: grep irc logs rfork e flagfmt='c,o,t target,A num,B num,C num' args='pattern [file ...]' fn usage{ aux/usage exit usage } fn prune{ grep -v '^([0-9]+ )?(PING|PONG|:[^ ]+ (JOIN|NICK|PART|QUIT))' } fn target{ grep 'PRIVMSG #?'$1' :' } fn own{ grep '^([0-9]+ )?PRIVMSG ' } fn format{ sed ' s/:([^ !]+)![^ ]+ PRIVMSG ([^ ]+) :/(\2) \1 → / s/PRIVMSG ([^ ]+) :/(\1) ⇐ / ' | tr -d \xd | while(i=`{read}){ if(~ $i(1) [0-9]*) echo `{date -t $i(1)} $i(2-) if not echo $i } } fn isint{ echo $1 | grep -s '^[0-9]+$' } if(! ifs=() eval `{aux/getflags $*} || ~ $#* 0) usage copts=() for(i in A B C){ if(eval '~ $#flag'$i' 1'){ n=flag$i n=$$n if(! isint $n) usage copts=($copts -$i $n) flagc=1 } } pat=$1 shift x=() if(~ $flagc 1){ if(~ $#flagt 1) x=($x target $flagt '|') if not x=($x prune '|') x=($x cgrep $copts '$"pat' '|') } if not{ if(~ $flago 1) x=($x own '|') if(~ $#flagt 1) x=($x target $flagt '|') x=($x grep '$"pat' '|') } x=($x format) echo x'='$"x >[1=2] if(~ $#* 0) *=/fd/0 for(f){ if(! ~ $#* 1) echo $f: <$f eval $x }