Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are good grep tools for Windows? [closed]

Tags:

grep

windows

People also ask

What can I use instead of grep in Windows?

findstr is the command equivalent to grep.

Does grep work on Windows?

Grep is a command-line option used to find a specific string from inside a file or multiple files or from an output of a command but it can be used only in Linux. For Windows, the grep alternative is findstr.

How do I run a grep command in Windows?

Use the -r "recursive" option to search a directory and all files included within it. # search the "hello" string in all files and # subdirectories of the current directory grep -r "hello" . # same as above but only list the file names grep -rl "hello" .

How do I download grep for Windows?

To install, simply download the file and run. By default it will install into your Program Files directory (usually c:\program files\windows grep) but you can install it anywhere. It doesn't copy any files into your Windows folder, but does use the registry to save settings.


FINDSTR is fairly powerful, supports regular expressions and has the advantages of being on all Windows machines already.

c:\> FindStr /?

Searches for strings in files.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         Matches pattern if at the beginning of a line.
  /E         Matches pattern if at the end of a line.
  /L         Uses search strings literally.
  /R         Uses search strings as regular expressions.
  /S         Searches for matching files in the current directory and all
             subdirectories.
  /I         Specifies that the search is not to be case-sensitive.
  /X         Prints lines that match exactly.
  /V         Prints only lines that do not contain a match.
  /N         Prints the line number before each line that matches.
  /M         Prints only the filename if a file contains a match.
  /O         Prints character offset before each matching line.
  /P         Skip files with non-printable characters.
  /OFF[LINE] Do not skip files with offline attribute set.
  /A:attr    Specifies color attribute with two hex digits. See "color /?"
  /F:file    Reads file list from the specified file(/ stands for console).
  /C:string  Uses specified string as a literal search string.
  /G:file    Gets search strings from the specified file(/ stands for console).
  /D:dir     Search a semicolon delimited list of directories
  strings    Text to be searched for.
  [drive:][path]filename
             Specifies a file or files to search.

Use spaces to separate multiple search strings unless the argument is prefixed
with /C.  For example, 'FINDSTR "hello there" x.y' searches for "hello" or
"there" in file x.y.  'FINDSTR /C:"hello there" x.y' searches for
"hello there" in file x.y.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurances of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word

Example usage: findstr text_to_find * or to search recursively findstr /s text_to_find *


Based on recommendations in the comments, I've started using grepWin and it's fantastic and free.


(I'm still a fan of PowerGREP, but I don't use it anymore.)

I know you already mentioned it, but PowerGREP is awesome.

Some of my favorite features are:

  • Right-click on a folder to run PowerGREP on it
  • Use regular expressions or literal text
  • Specify wildcards for files to include & exclude
  • Search & replace
  • Preview mode is nice because you can make sure you're replacing what you intend to.

Now I realize that the other grep tools can do all of the above. It's just that PowerGREP packages all of the functionality into a very easy-to-use GUI.

From the same wonderful folks who brought you RegexBuddy and who I have no affiliation with beyond loving their stuff. (It should be noted that RegexBuddy includes a basic version of grep (for Windows) itself and it costs a lot less than PowerGREP.)


Additional solutions

Existing Windows commands

  • FINDSTR
  • Select-String in PowerShell

Linux command implementations on Windows

  • Cygwin
  • Cash

Grep tools with a graphical interface

  • AstroGrep
  • BareGrep
  • GrepWin

Additional Grep tools

  • dnGrep

GrepWin is free and open source (GPL)

Enter image description here

I've been using grepWin which was written by one of the TortoiseSVN guys. It does the job on Windows...


Update July 2013:

Another grep tool I now use all the time on Windows is AstroGrep:

AstroGrep awesomeness

Its ability to show me more than just the line search (i.e. the --context=NUM of a command-line grep) is invaluable.
And it is fast. Very fast, even on an old computer with non-SSD drive (I know, they used to do this hard drive with spinning disks, called platters, crazy right?)

It is free.
It is portable (simple zip archive to unzip).


Original answer October 2008

alt textGnu Grep is alright

You can download it for example here: (site ftp)

All the usual options are here.

That, combined with gawk and xargs (includes 'find', from GnuWin32), and you can really script like you were on Unix!

See also the options I am using to grep recursively:

grep --include "*.xxx" -nRHI "my Text to grep" *

PowerShell's Select-String cmdlet was fine in v1.0, but it is significantly better for v2.0. Having PowerShell built in to recent versions of Windows means your skills here will always be useful, without first installing something.

New parameters added to Select-String: Select-String cmdlet now supports new parameters, such as:

  • -Context: This allows you to see lines before and after the match line
  • -AllMatches: which allows you to see all matches in a line (Previously, you could see only the first match in a line)
  • -NotMatch: Equivalent to grep -v o
  • -Encoding: to specify the character encoding

I find it expedient to create an function gcir for Get-ChildItem -Recurse ., with smarts to pass parameters correctly, and an alias ss for Select-String. So you an write:

gcir *.txt | ss foo