Searching through log files for a particular string of text? How about trying to find a particular piece of source code in a large directory of files? Use FINDSTR to quickly locate the files containing the text you are looking for.
Findstr is capable of finding the exact text you are looking for in any ASCII file or files. However, sometimes you have only part of the information that you want to match, or you want to find a wider range of information. In such cases, findstr has the powerful capability to search for patterns of text using regular expressions.
Examples
findstr "Uptime Requirement" myfile.txt
In the above example, any lines containing “Uptime Requirement” in the file “myfile.txt” would be printed to the screen.
findstr /s "Uptime Requirement" *.txt
Similar to the first example, the above example would find any lines containing “Uptime Requirement” in any file with a .txt extension, in the current directory and all sub directories.
findstr /x /c:"Uptime Requirement" *.txt
Match .txt files that contain an exact match on “Uptime Requirement“. Files that contain “Uptime Requirements” or other non-exact matches will not be displayed. It is important to realize that using /x must be a line that exactly matches “Uptime Requirement“. In other words, if anything else is on the same line, it’s not an exact match.
findstr /n /i /c:"Uptime Requirement" *
Search for any file containing “Uptime Requirement” regardless of its case and display the line where the text is found.
In the real world …
One of the things that most people don’t know is that I myself have written all the code which runs this site. From time to time, actually about weekly, I do some updates. Most of the back-end of the site is pretty modular, in which most things have been broken down into functions, which can be called from anywhere else on the site.
This being mainly a knowledge base type site, searches are pretty integral. Every time a page is loaded, there are database searches going. One of these searches is encapsulated in a function called FindRelated. What FindRelated does is, given an source article, it parses that article for keywords, tags, etc., then searches the database for articles that might be related to the article that is being viewed by the user.
Now lets say I perform an update to the FindRelated, and I name the new version FindArticle2. Now I’ve got to go to every page where FindRelated is referenced, and change it to FindRelated2. Did I mention there are about a million files full of code that run this site? Well, maybe not a million, but there are an awful lot of files. Rather than trying to remember which file contains references, I can drop to a command prompt and use FindStr to find all code files within the current directory and all subdirectories that contain references to FindRelated. Here is how I do it:
findstr /s /i /m "FindRelated" *.asp
And that’s it. FindStr will happily search all .asp files in the current directory and all its subdirectories for occurences of FindArticle, and print the filenames on screen. Simple.
Command Syntax Reference
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[ ...]]
Switch/Value | Explanation |
---|---|
/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. |
Regular expression quick reference
Regular expressions are a notation for specifying patterns of text, as opposed to exact strings of characters. The notation uses literal characters and metacharacters. Every character that does not have special meaning in the regular expression syntax is a literal character and matches an occurrance of that character. For example, letters and numbers are literal characters. A metacharacter is a symbol with special meaning (an operator or delimiter) in the regular-expression syntax.
RegEx | Explanation |
---|---|
. | Wildcard: any character |
* | Repeat: zero or more occurrences 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 |
\ | Word position: beginning of word |
xyz\> | Word position: end of word |