Wednesday, July 27, 2005


I learned how to program in a UNIX environment. In a UNIX environment, almost everything is done from the command line (or can be). Sure, there was a GUI that you could click around on, but if you really wanted to get something done, your just wrote a script for it and fired it off on the command line. One of the tools that was really useful was the "grep" command. This command would take a search string as an argument, and then search through all of the files in the directories you specified for that string. It was very useful when debugging code, because you could quickly determine all of the code files that touched a particular class or header file.

Sadly, grep was missing from my list of command line utilities when I moved over to developing on a Windows platform. In fact, the command line was pretty well shunned. Instead, Visual development was the word of the day. I still missed my friendly grep command though. Sometime last fall, I discovered the FINDSTR command in windows. On the command line, the FINDSTR command works much like grep in that it will search for a given string in the subdirectories you specify. It's much handier (to me anyway) than the graphical search tool because I don't have to worry that it isn't skipping files it doesn't recognize as text files. If you want to use it, here is the info:

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
/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.
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: end of word

For full information on FINDSTR regular expressions refer to the online Command