Search Tools Links Login

Using FINDSTR to search file contents


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

About this post

Posted: 2010-07-12
By: dwirch
Viewed: 16,017 times

Categories

Tip

Windows Commandline

Tutorials

Windows

Attachments

No attachments for this post


Loading Comments ...

Comments

AnonymousCoward posted this comment on 2018-09-12:

TASKLIST>>lista1
findstr /s /i /n /p /c:"123.exe" lista1>>result
lista1:117:123.exe   2392 Console      1    33.328 k

Preciso encerrar a task 123.exe varias vezes, e quero facilitar com um arquivo.BAT.
Gostaria de completar este BAT onde obtivesse o valor do PID (2392) desta task, 
á ser encerrada, já que ele muda toda vez que 123.exe reinicia.  (Após as 2 linhas acima)
obtive o arquivo result (3a linha).
Como se faz para usar este novo PID no final do BAT ? ex:
"taskkill /PID 2392" 
Obtigado.  rodamps@live.com

dwirch posted this comment on 2018-09-13:

Have you tried using the filter command to show only the exe that you are looking for?  For Example:

tasklist /FI "IMAGENAME eq cmd.exe"

This will show only the task with the name cmd.exe. Thus:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
cmd.exe                       9836 31C5CE94259D4006           2      3,244 K

To filter it further, use the /NH switch:

tasklist /FI "IMAGENAME eq cmd.exe" /NH

From there, it is just string handling to find the PID.

dwirch posted this comment on 2018-09-13:

Also, I would highly recommend using PowerShell for this particular task, if you can. The below snippet does exactly what you want, using notepad as a test subject.

$MyProcess=get-process | where-object { $_.ProcessName -eq "notepad" }
Stop-Process -Id $MyProcess.Id

You must be logged in to make a comment.