; a_grep.mrc (Aliases)
; GREP by Raccoon 02-June-2013
;
; Usage: /grep <["][path\]file_mask.*.log["]> <word_or_*globbing*_or_/regex/_pattern>
;
; Examples:
; /grep #irchelp*.log raccoon | This will search all #irchelp* logs for *raccoon* (globbing pattern)
; /grep #mirc.efnet.*.log /khaled|madgoat/i | This will search EFNet #mirc logs for "khaled" or "madgoat" (regex pattern)
; /grep c:\logs\mirc\2006\freenode\*.log *lilo* | Find any mention of "lilo" in your Freenode logs from 2006. (globbing pattern)
; /grep "c:\program files\mirc\versions.txt" /mIRC v\d.\d\d/ | Grep file(s) that has spaces in its path using quotes.
;
; If you use "/.../" around your pattern, it treats it as a Regular Expression. You cannot use the 'm' prefix, sorry.
; If your globbing pattern does not contain '*' or '?' then '*' will be automatically be placed on both sides of your pattern.
grep { ; by Raccoon 02-June-2013
if ($0 == 0) { echo -aic info * Usage: /grep <["]file_or_mask["]> <globbing_or_/regex/_pattern> | return }
; /^(?:"([^"]+)"|(\S+)) (.*)$/
if ("* iswm $1) { var %fullpath = $gettok($1-,1,34), %pattern = $gettok($1-,2-,34) }
if (%fullpath == $null) var %fullpath = $1
if (%pattern == $null) var %pattern = $2-
var %path = $iif($nofile(%fullpath),$v1,$logdir)
var %filemask = $nopath(%fullpath)
if (/*/* iswm %pattern) { var %regex = g }
if (!%regex) && (* !isin %pattern) && (? !isin %pattern) { var %pattern = * $+ %pattern $+ * }
window -Deizj100000 @grep
echo @grep -
echo 5 @grep Searching $qt(%path) for files matching $qt(%filemask) containing: %pattern $iif(%regex,(regex))
echo @grep -
editbox -b1e9999 @grep Press DELETE to Abort ...
set -e %grep.path %path
set -e %grep.filemask %filemask
set -e %grep.pattern %pattern
set -e %grep.regex %regex
set -e %grep.i 1
set -e %grep.lines 1
set -e %grep.matches 0
set -e %grep.matchfiles 0
set -e %grep.start $ticks
_grep
}
_grep { ; by Raccoon 02-June-2013
if (Press* iswm $editbox(@grep)) {
var %ticks = $ticks, %dur = $int($calc((%ticks - %grep.start)/1000))
var %dur = $iif($int($calc(%dur / 60)) < 10,0 $+ $v1,$v1) $+ : $+ $iif($calc(%dur % 60) < 10,0 $+ $v1,$v1)
WHILE ($findfile(%grep.path,%grep.filemask,%grep.i,2)) {
var %file = $v1
if ($calc($ticks - %ticks) > 500) { .timergrep -oi 1 0 _grep | return }
;set -e %grep.lines $lines(%file)
editbox -b1e25 @grep Press Space to Abort ... %dur $baton($calc((%ticks - %grep.start)/1000)) $&
%grep.matches matches $baton(%grep.matchfiles) %grep.matchfiles $+ / $+ %grep.i files $baton(%grep.i) $replace(%file,%grep.path,.\) $baton(%grep.i) $&
$qt(%grep.pattern)
filter -fwph20n $+ %grep.regex %file @grep %grep.pattern
if ($filtered) {
echo 2 @grep $filtered matches in %file
echo @grep -
inc %grep.matches $filtered
inc %grep.matchfiles 1
}
inc %grep.i
}
}
else {
echo @grep -
echo 4 @grep Aborted.
}
echo 2 @grep Done. Found %grep.matches matches in %grep.matchfiles of %grep.i files for $qt(%grep.pattern) $+ .
editbox @grep
unset %grep.*
}
baton { return $mid(-\|/,$calc($1 % 4 + 1),1) } ; by Raccoon
;===============================================================================
; WGREP - Window Grep
; Usage: /wgrep <word_or_*globbing*_or_/regex/_pattern>
;===============================================================================
wgrep { ; by Raccoon 20-Nov-2014
if ($0 == 0) { echo -aic info * Usage: /wgrep *pattern* or /wgrep /regex/i | return }
var %pattern = $1-
var %regex = 0
if (/*/* iswm %pattern) { var %regex = 2 }
if (!%regex) && (* !isin %pattern) && (? !isin %pattern) { var %pattern = * $+ %pattern $+ * }
window -aDeizj1000000 @wgrep
echo -ic notice @wgrep Searching for %pattern ...
echo @wgrep -
var %wids
var %matches = 0
var %ticks = $ticks
var %scon_i = 1
WHILE $scon(%scon_i) {
scon %scon_i
var %win_i = 1
WHILE $window(*,%win_i) {
var %win = $v1
var %wid = $window(%win).wid
if ($istok(%wids,%wid,32)) || (%win == @wgrep) { inc %win_i | continue }
var %wids = %wids %wid
editbox @wgrep %matches matches... $network %win
var %fline_i = 1
WHILE 1 {
if ($calc($ticks - %ticks) >= 10000) && (!%longsearch) {
var %input = $input(This search is taking a long time. $+ $crlf $+ $crlf $+ $&
Would you like to continue searching?, y, /wgrep)
if (!%input) { echo 4 -ei @wgrep Aborted. | editbox @wgrep | halt }
var %longsearch = $true
}
var %line = $fline(%win,%pattern,%fline_i,%regex)
if (!%line) { break }
var %text = $line(%win,%line)
var %color = $line(%win,%line).color
inc %matches
echo %color @wgrep $gettok(%win,1,32) %text
editbox @wgrep %matches matches... $network %win ... %fline_i
inc %fline_i
}
if (%fline_i > 1) { echo -ic notice @wgrep * $calc(%fline_i - 1) matches in $network %win for %pattern }
echo @wgrep -
inc %win_i
}
inc %scon_i
}
scon -r
echo -eic info @wgrep Found %matches matches for %pattern
editbox @wgrep
}