Acme-CPANModules-GrepVariants

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

NAME
    Acme::CPANModules::GrepVariants - List of grep-like CLI utilities
    available on CPAN

VERSION
    This document describes version 0.014 of Acme::CPANModules::GrepVariants
    (from Perl distribution Acme-CPANModules-GrepVariants), released on
    2025-08-20.

DESCRIPTION
    This list catalogs various grep-like tools.

    1. Reimplementations

    grep (from PerlPowerTools) simply tries to reimplement grep in Perl, as
    part of the project to reimplement many Unix utilities in Perl. It has
    few practical uses; mainly educational. The portability advantage of
    Perl is probably minor as grep and many Unix utilities are now available
    on other platforms including Windows.

    2a. Improvements in recursive searching against files

    ack. Created in 2005 by Andy Lester, ack is the granddaddy of grep-like
    programs that try to improve the experience of using grep to search for
    text in source code. ack skips VCS directories like ".git" or ".svn",
    and understands file types so it doesn't look into giant ".mp4"s and
    other binaries by default. ack has spurred the development of its
    improvements (mostly in speed aspect) like The Silver Searcher ("ag")
    (implemented in C) or "ripgrep" (implemented in Rust). "git" also now
    includes a "git-grep" utility (implemented in C). ack has a website:
    <https://beyondgrep.com>. See also <https://betterthanack.com>.

    gre (from App::Gre) is a "grep clone using Perl regexp's with better
    file filtering, defaults, speed, and presentation". It seems to focus on
    providing many options to filter files (from including/excluding by file
    extension, by matching against filename, by first line, by maximum
    directory depth, and so on). It also offers some alternative output
    styles.

    2b. Improvements in searching for multiple patterns in no particular
    order

    Normally with the regular grep, to search for all 'foo' and 'bar' *in no
    particular order*, you either have to do something like:

     % grep --color=always foo FILES | grep bar

    or:

     % grep -P 'foo.*bar|bar.*foo' FILES

    both of which get unwieldy if the number of patterns get higher. Or you
    can use look-ahead:

     % grep -P '(?=.*foo)(?=.*bar)' FILES

    but this does not capture (thus highlight) the patterns. To do that, you
    can pipe to grep once more:

     % grep -P '(?=.*foo)(?=.*bar)' FILES | grep -P '(foo|bar)'

    but you introduce the complications of double filtering (e.g. filenames
    in FILES is now the subject of the second grep).

    Note that searching for multiple patterns in particular order
    ('foo.*bar'), or searching for aternates from multiple patterns
    ('foo|bar') is no problem in grep.

    Some tools have been written to make it easier to specify multiple
    patterns:

    abgrep (from App::abgrep) sports a "--all" option to require all
    patterns to appear in a line (in no particular order). Normally, when
    multiple patterns are given (via multiple "-e" or "--regexp" options),
    grep will include lines that just contain at least one of the patterns.

    greple (from App::Greple). By default, greple only display lines that
    contain all patterns, instead of just one. greple also has a few other
    tricks up its sleeve, like configuration file to define complex regexes,
    matching across lines, and Japanese text support.

    grep-terms (from App::GrepUtils) is a grep wrapper to convert multiple
    terms into a chain of look-ahead patterns like described above. This
    allows you to use the standard grep.

    3. Variants: alternate ways of specifying things to search for

    Instead of specifying a regexp pattern directly, with rpgrep (from
    App::rpgrep) you can specify a pattern name in a Regexp::Pattern::*
    module instead.

    With wcgrep (from App::wcgrep) you can search using wildcard pattern
    instead of regex, which is admittedly more limited than regex.

    grep-similar-to (from App::grep::similar::text lets you specify a text
    and it will only show lines from input that are similar to the provided
    text.



( run in 0.814 second using v1.01-cache-2.11-cpan-39bf76dae61 )