Xref: utzoo comp.unix.wizards:9014 comp.unix.questions:7345 Path: utzoo!attcan!uunet!nbires!isis!aburt From: aburt@isis.UUCP (Andrew Burt) Newsgroups: comp.unix.wizards,comp.unix.questions Subject: Re: grep replacement Message-ID: <2274@isis.UUCP> Date: 1 Jun 88 04:17:06 GMT References: <7882@alice.UUCP> <5630@umn-cs.cs.umn.edu> <6866@elroy.Jpl.Nasa.Gov> <2978@ihlpe.ATT.COM> <1463@laidbak.UUCP> <4524@vdsvax.steinmetz.ge.com> Reply-To: aburt@isis.UUCP (Andrew Burt) Organization: Math/CS, University of Denver Lines: 49 I'd like to see the following enhancements in a grepper: - \< and \> to match word start/end as in vi, with -w option as in BSD grep to match pattern as a word. - \w in pattern to match whitespace (generalization: define \unused-letter as a pattern; or allow full lex capability). - way to invert piece of pattern such as: grep foo.*\^bar\^xyzzy with meaning as in: grep foo | grep -v bar | grep -v xyzzy (or could be written grep foo.*\^(bar|xyzzy) of course). - Select Nth occurrence of match (generalization: list of matches to show: grep -N -2,5-7,10- ... to grab up to the 2nd, 5th through 7th, and from the 10th onward). - option to show lines between matches (not just matching lines) as in: grep -from foo -to bar ... meaning akin to sed/ed's /foo/,/bar/p. (But much more useful with other extensions). - Allow matching newlines in a "binary" (or non-text) sort of mode: grep -B 'foo.*bar' finds foo...bar even if they are not on the same line. (But printing the "line" that matches wouldn't be useful anymore, so just printing the matched text would be better. Someone wanting lines could look for \n[^\n]*foo.*bar[^\n]*\n, though a syntax to make this easier might be in order. Perhaps this wouldn't be an example of a binary case -- but a new character with meaning like '.' but matching ANY character would work: if @ is such a character then "grep foo@*bar". Perhaps a better example, assuming the \^ for inversion syntax above would be "grep foo@*(\^bar)bar -- otherwise it would match from first foo to last bar, while I might want from first foo to first bar.) - provide byte offset of start of match (like block number or line number) useful for searching non-text files. - Provide a lib func that has the RE code in it. - Install RE code in other programs: awk/sed/ed/vi etc. Oh for a standardized RE algorithm! -- Andrew Burt isis!aburt Fight Denver's pollution: Don't Breathe and Drive.