Question

Regular Expression related

Asked by: puneetdudeja

I am searching for patterns in multiple files in multiple directories using regular expressions.
I am using findstr command of DOS.

We can specify multiple search strings in the findstr command, and that gives all those files in result which contained strings matching to any of the search patterns specified. (first pattern or second pattern or third pattern and so on, if any one is found, file is output in result)

What I want::

If all of these search patterns are found within the file, only then that file should be output in the result.

What is required for this is either a regular expression that can contain all the patterns (like separated with a delimiter AND) or some other method.

If there is any regular expression that gives results only if all the patters are found, I would really like to know about it, other wise some other method is highly appreciated.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-08-26 at 04:24:11ID24682786
Tags

regular expression findstr dos

Topics

Regular Expressions

,

MS DOS

,

Windows Batch Scripting

Participating Experts
2
Points
500
Comments
25

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Regular Expression -- How to Configure for the User
    Hi All, I want to provide a configuration File to find Find and Replace various pattern. for example, if the configuration like below: ### Paramter = Search Pattern|Replace Pattern ##Comment for user Parameter = <test1>all-text</test1>|<test2>all-tex...
  2. Using Findstr to find credit card numbers
    I am wanting to use findstr.exe to find credit card number patterns but seem to always crash the program. I want to look for these patterns: (Dashes can be spaces or dashes) XXXX-XXXX-XXXX-XXXX XXXX XXXX XXXX XXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXX-XXXXXX-XXXXX When i d...
  3. Regular Expression Pattern
    Hello everyone, If someone could help me out with a simple regular expression pattern. The pattern should match "TableName = values, value2, value X" It should return false if you get "TableName = " or "TableName = , , ," Regular Expression i...
  4. Batch file for findstr
    Hello, I am no amateur in batch scripting...With help about findstr from the command line, i was able to make the findstr work for me in the commandline. My command is: findstr /r /i /m "AddImgIfNextIsSame" e:\dap\dapcore\ho\v97\mstrres\ddtlib\*.* >> H:\da...
  5. Findstr
    I'm trying to find files or documents on my file servers that might contain sensitive information such as SSN or CC info. I need to remove them or to encrypt them to be complient. I tried to use findstr, but I wonder how to apply the syntax. Any advice?

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: QlemoPosted on 2009-08-26 at 04:40:13ID: 25186434

Are you using a single findstr to search all files? Could you give an example how you use it?

 

by: puneetdudejaPosted on 2009-08-26 at 04:43:48ID: 25186460

I am using the following command for finding any lines that are setting SESSION object in php code.

findstr /s /r /m /i /d:P: /c:" *$_session[^=]*=[^;]*;" *.*

What I want is the word "ActionPriv_info" must also be there in that file which contains the above match.

 

by: puneetdudejaPosted on 2009-08-26 at 04:52:14ID: 25186512

One method I am thinking of is to create a .bat file that will loop through each of the files output by findstr in the above command and then again second findstr will take each of the file and search for the next pattern, if found only then that file will be output.

But I will have to work hard for it, because I don't know the batch programming syntax.
So I am thinking that if RegularExpression can be manipulated for this requirement, if will be much better for me.

 

by: QlemoPosted on 2009-08-26 at 04:55:59ID: 25186538

Since findstr does not allow for a AND syntax, you have to chain it. But simple piping will act on the same line only. We have to use a tricky option then:

 findstr /s /r /m /i /d:P: /c:" *$_session[^=]*=[^;]*;" *.* | findstr /L /m /i /F:/ /d:P: /c:"ActionPriv_info"

See the /F:/ ? It takes the output of the previous command (again a findstr), and interprets each line as file name to search in. This is the most efficient way to do it with findstr.

 

by: puneetdudejaPosted on 2009-08-26 at 05:25:04ID: 25186759

Its not working, see the snippet::

C:\> findstr  /r /m /i /d:D: /c:"dudeja" *.txt
  D::
test.txt
test1.txt
test2.txt
 
C:\> findstr  /r /m /i /d:D: /c:"puneet" *.txt
  D::
test.txt
 
C:\> findstr  /r /m /i /d:D: /c:"dudeja" *.txt | findstr /L /m /i /F:/  /c:"puneet"
FINDSTR: Cannot open   D::
FINDSTR: Cannot open test.txt
FINDSTR: Cannot open test1.txt
FINDSTR: Cannot open test2.txt
 
C:\>

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

Select allOpen in new window

 

by: QlemoPosted on 2009-08-26 at 07:14:01ID: 25187882

Sorry for that. For this to work, you have to be in the correct path. findstr does not prepend the /D: folders. So we have to do:

For a single folder:

cd /D D:
findstr  /L /m /i  /c:"dudeja" *.txt | findstr /L /m /i /F:/  /c:"puneet"
for multiple folders:
for %D in (D: E: F:) do (
  cd /D %D
  findstr  /L /m /i  /c:"dudeja" *.txt | findstr /L /m /i /F:/  /c:"puneet"
)
In a batch file, you need to use %%D instead of %D each occurance.

 

by: t0t0Posted on 2009-08-26 at 09:47:48ID: 25189740

See below:

As a DOS commandline command:
 
for /f "delims=:" %a in ('findstr /i "dudeja" *.txt ^| findstr /i /m "puneet"') do @echo %a
 
 
As a batch file command
 
for /f "delims=:" %%a in ('findstr /i "dudeja" *.txt ^| findstr /i /m "puneet"') do echo %%a

                                              
1:
2:
3:
4:
5:
6:
7:
8:

Select allOpen in new window

 

by: t0t0Posted on 2009-08-26 at 09:49:02ID: 25189749

Oops! Please ignore that last comment.

 

by: puneetdudejaPosted on 2009-08-26 at 10:03:35ID: 25189895

t0t0, can you please explain what is happening in your command ?

What does the carret and pipe combined "^|" doing in the findstr commmand ?
And can I use use /d: option in findstr in this way of using the command findstr ?

 

by: t0t0Posted on 2009-08-26 at 10:14:50ID: 25189975

will only search a single drive at a time though:


@echo off
setlocal enabledelayedexpansion

for /r %%a in (*.txt) do (
   findstr /i "\<dudeja\>" "%%a">nul
   if !errorlevel!==0 (
      findstr /i "\<puneet\>" "%%a">nul
      if !errorlevel!==0 (
         echo %%~nxa
      )
   )
)
exit /b

 

by: puneetdudejaPosted on 2009-08-26 at 10:17:26ID: 25189994

t0t0,

Please explain your previous code, that I have asked for in my previous comment.

 

by: t0t0Posted on 2009-08-26 at 10:25:47ID: 25190064

please ignore the previous code because the output of the first FINDSTR - which is the actual line containing the first search string, is passed to the second FINDSTR and this is not what I intended. My intention was to output the filename from the first FINDSTR as input into the second FINDSTR and but that doesn't work for 2 reasons. Which is why I asked you to ignore it.

The ^| is the general way to include a pipe symbol in FOR loops...

 

by: t0t0Posted on 2009-08-26 at 10:57:10ID: 25190373

Qlemo

If you're searching the whole of drive D: then it should be:

    CD /D %D\

or

    CD /D %%D\

as this sets the working folder to the root of the drive.

 

by: QlemoPosted on 2009-08-26 at 11:03:51ID: 25190446

No, it is correct, I just coded the equivalent for the /D:D: option. No backslash appended, as you can see. Of course you should provide full path (and I would do that) in any other case.

 

by: t0t0Posted on 2009-08-26 at 12:00:00ID: 25191000

but surely if the current working directory on say D: is d:\temp and the CWD on say F: is f:\ and finally, the CWD on E: is e:\books then CD /D %D will change to the following three folders:

   d:\temp
   f:\
   e:\books

if no path is specified as part of FOR's (D: E: F:) set. It can not be guaranteed any of the drives' CWD is the root at any specific time.

 

by: QlemoPosted on 2009-08-26 at 12:40:06ID: 25191414

Again: I mimiked the findstr /D parameter. It behaves like that. And nobody is talking about root folders here but you.

 

by: t0t0Posted on 2009-08-26 at 13:10:12ID: 25191709

We must be on different planets then.... I could be wrong but here's my understanding and reasoning:


1)  for %D in (D: E: F:) do (

During each iteration of the FOR loop, %D will be set to the following values:

   D:

   E:

   F:

2)  cd /D %D

Taking just the last iteration as an example, %D is set to F: therefore, the CD /D command will change to drive F: however, as no path was specified as part of the F: in FOR's set you cannot guarantee what the current working directory of drive F: wiil be. The same also applies to drive D: and drive E:.

3)  findstr /L /m /i /c:"dudeja" *.txt | findstr /L /m /i /F:/ /c:"puneet"

Nothing wrong with this except you don't know what part of the drive it starts it's searches from becuase you've CD'd blindly into a drive.

4)  )

Just to complete the block!!

Does that make any sense?

Suppose you had this instead:

   for %D in (D:\ E:\books "F:\Backup 20090825\Books") do (
      cd /D %D
      findstr  /L /m /i  /c:"dudeja" *.txt | findstr /L /m /i /F:/  /c:"puneet"
   )

Here, the paths are explicit and so during each iteration %D would be set to the following values:

   D:\

   E:\books

   "F:\Backup 20090825\Books"

and so the CD command with the /D option would now change drive AND change to a specific directory. By omitting the path you will ONLY change drives and therefore, you cannot guarantee what directory you'll be thrown into.

Are we on the same planet now?

(PS, if all this gets bunched up then it's EE's rich text formatting's fault)

 

by: QlemoPosted on 2009-08-26 at 13:16:25ID: 25191772

That for command of me was an example. It has not been requested (yet) by the asker. Hence I can write what I want, it is just to get the idea. To stress the effect you wrote about, it would have been better to provide paths, but it is not necessary.

 

by: t0t0Posted on 2009-08-26 at 13:25:30ID: 25191865

Okay, I can sense you're not interested in discussing this further. Obviously, we ARE on different planets!!

Hopefully I'll catch you in a better mood on another occasion.

 

by: puneetdudejaPosted on 2009-08-26 at 21:07:41ID: 25194501

I understand that piping will work only if we are in a single drive.

If I have test,test1,test2 all in the D: drive, then the following command does not execute::

                      D:\>findstr /L /m /i /F:test.txt test1.txt test2.txt /c:"puneet"

I want to understand how to specify the /F: option in findstr, so that I could understand how it is taking its input from the output of first findstr through piping.

 

by: puneetdudejaPosted on 2009-08-26 at 21:09:33ID: 25194509

Sorry, now I understood, that /F: takes files from another file or console.
Now give me some time to try your code.

 

by: puneetdudejaPosted on 2009-08-26 at 23:15:25ID: 25195045

t0t0, In your script in the following comment:
http://www.experts-exchange.com/Programming/Languages/Regular_Expressions/Q_24682786.html?#25189975

What is ~nxa ?
And what for  \< , \> is used. Although I have guessed but I want to confirm.
What does exit /b does ?

 

by: t0t0Posted on 2009-08-27 at 02:54:04ID: 25196130

%%a is a FOR-loop's variable, in that particular instance it was used for assignment of filenames. By shoving a '~nx' in between the '%%' and 'a' it returns just the name part and the extension part of the filename thereby ignoring the drive letter part and the path part.

If searching a file for say, "ABLE" then FINDSTR will return a successeful match if it encounters any of the following: "table", "able", "enable", "cable" etc... By wrapping '\<' and '\>' around search-string "ABLE", FINDSTR will only return a successful match against "able" and not the others.

Often, you'll see no actual 'end' to a batch file - it merely ends when it runs out of instructions to process. EXIT can be used anywhere in the code to bring the batch file to an end. Without the /B switch, EXIT would actually close the DOS box which iin some situations that might be desirable however, by including the /B, the DOS box stays open when the batch file ends.

 

 

by: puneetdudejaPosted on 2009-08-27 at 03:08:57ID: 25196221

Where can I study about other things (syntax) of this type "~nx", because this might be only one out of many in batch scripting and I can't search on google just by typing "~nx". I know if I study complete batch scripting, I will get to know about this syntax but I only want to see the main crux.

 

by: QlemoPosted on 2009-08-27 at 03:39:59ID: 25196388

Call    for /?,  and look at the bottom of the help it provides.
For other variable expansion tricks, use   set /?   and     cmd /?
That gives you 80% of the knowledge you need.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...