Acme-CPANModules-GrepVariants
view release on metacpan or search on metacpan
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:
( run in 1.777 second using v1.01-cache-2.11-cpan-39bf76dae61 )