Cached at:
08/25/26, 07:46 PM
# Feature comparison of ack, ag, git-grep, grep and ripgrep
Source: [https://beyondgrep.com/feature-comparison/](https://beyondgrep.com/feature-comparison/)
There are many greplike tools available to choose from\. ripgrep is currently the fastest, which folks seem to focus on, but they have different features\. Here's a chart to help you see which tools can do what\.
ack ag git\-grep GNU grep rg NameackThe Silver Searchergit\-grepGNU grepripgrepProject page[Link](https://beyondgrep.com/)[Link](https://geoff.greer.fm/ag/)[Link](https://git-scm.com/docs/git-grep)[Link](https://www.gnu.org/software/grep/)[Link](https://github.com/BurntSushi/ripgrep)LanguagePerlCCCRustLicenseArtistic License 2\.0Apache License 2\.0GPL 2GPL 3MIT/UnlicenseRegular expressionsNative PerlPerl\-compatibleBasic, extended, or Perl\-compatibleBasic, extended, or Perl\-compatible \(experimental\)Fast non\-backtracking, Perl\-compatible, or automatic selectionFeature ack ag git\-grep GNU grep rg Search whereanywhereanywheregit repository by default, or anywhere with \-\-no\-indexanywhereanywhereSearch git history✔Include/exclude files by filetype✔✔✔Specify filetype by file extension✔✔✔Specify filetype by pattern match on filename✔✔✔✔Specify filetype by pattern match on first line of file✔Configuration fileSystem\-, user\- and project\-levelSystem\-, user\- and project\-levelSpecified by RIPGREP\_CONFIG\_PATH environment variableIgnore files based on \.gitignore or \.ignore files✔✔✔Parallelism✔, threads✔, threads✔, threadsDeterministic output✔, using \-\-sort\-files✔, using \-\-sort pathMatch patterns across newlines✔✔Smart case searching✔✔✔Multiple patterns with boolean expressions✔Print lines by number✔Show proximity of matches to other matches✔, in ack 3Build output for each line based on match groups✔✔Limit length of output lines✔✔Underline matches to show matches w/o color✔Search in gzip files✔✔Searching ack ag git\-grep GNU grep rg Ignore case✔✔✔✔✔Smart case searching \(case\-insensitive unless the pattern contains a capital letter\)✔✔✔Re\-enable case\-sensitive search over case\-insensitive or smart\-case search✔✔✔✔Match whole words✔✔✔✔✔Invert match✔✔✔✔✔Match entire line only✔✔Specify pattern explicitly✔✔✔✔Read patterns from a file✔✔✔Specify multiple patterns with boolean expressions✔Match patterns across newlines✔✔Print specific lines by number✔Regular expressions ack ag git\-grep GNU grep rg Use fixed strings, not regular expressions, for a literal match✔✔✔✔✔Use basic regular expressions✔✔Use extended regular expressions✔✔Use Perl \(or Perl\-compatible\) regular expressions✔✔✔✔✔Search output ack ag git\-grep GNU grep rg Print only filenames that contain matches✔✔✔✔✔Print only filenames that do not contain matches✔✔✔✔✔Show only the part of a line that matched✔✔✔✔Specify output for each line match✔✔Print the filename for each match✔✔✔✔✔Suppress the prefixing filename on output✔✔✔✔✔Print paths relative to the project top directory✔Prefix the line number to matching lines✔✔✔✔Suppress line numbers✔✔✔Print a heading of each file's name before its matches✔✔✔✔Specify filename to show for matches on STDIN✔Show the column number of the first match✔✔✔Print lines of context after matches✔✔✔✔✔Print lines of context before matches✔✔✔✔✔Print lines of context before and after matches✔✔✔✔✔Show number of lines matching per file✔✔✔✔✔Print null byte as separator between filenames✔✔✔✔✔Stop searching in each file after NUM matches✔✔✔✔Stop searching after one match of any kind✔Print the byte offset within the file before each line✔✔Suppress error messages about nonexistent or unreadable files✔✔✔✔Limit length of output lines✔✔Do not output matched lines✔✔✔Print stats \(files scanned, time taken, etc\.\)✔✔File presentation ack ag git\-grep GNU grep rg Enable color output✔✔✔✔✔Underline matches✔Set colors for various output items✔✔✔✔✔Pipe output through a pager or other command✔✔Separate match output with blank lines unless they are on adjacent lines✔Group together all matches in a file✔✔✔Specify group separator✔Show the function name of the match✔Show the function in which a match was found✔Print a break between results from different files✔✔Flush output on every line✔✔✔File finding ack ag git\-grep GNU grep rg Only print the files selected, without searching✔✔Show which types each file has✔List searchable files that match a pattern✔✔✔Read the list of files to search from FILE✔Sort the found files lexically✔✔Read the list of files to search from STDIN✔Limit search to filenames matching a pattern✔✔Search hidden files✔✔File inclusion/exclusion ack ag git\-grep GNU grep rg Search only files of a given type✔✔✔Exclude files of a given type✔✔Recurse into subdirectories✔✔✔✔Recurse into subdirectories, following symlinks✔✔No descending into subdirectories✔✔✔Add/remove directory from list of ignored dirs✔✔✔Don't respect ignore files \(\.gitignore, \.ignore, etc\)✔Ignore files larger than a given size✔Specify files to search✔✔Ignore files/directories matching✔✔✔Add filter for ignoring files✔✔Include only files of recognized types✔✔Follow symlinks✔✔✔Don't follow links to other devices✔✔✔Search all types of files✔Limit directory search depth✔✔✔Search binary files✔✔Treat files as binary✔Don't search in binary files✔Treat binary files as if they were text✔✔Search all text files✔✔Search all files✔✔Skip rules found in VCS ignore files \(\.gitignore, \.hgignore, etc\)✔✔✔File type specification ack ag git\-grep GNU grep rg Create a filetype, replacing the previous specs✔Add specifications to an existing filetype✔✔Remove a file type✔✔Ignore default type definitions✔Display all known types✔✔✔Miscellaneous ack ag git\-grep GNU grep rg Print all lines, whether matching or not✔✔✔Outputs a default ackrc for your customization to standard output✔Dump information on which options are loaded✔✔Specify a configuration file to use✔Ignore environment variables and global configuration files✔✔Treat standard input as a pipe✔Search contents of compressed files \(e\.g\. gzip\)✔✔Specify input file encoding✔