Re: Slightly OT: How to grep for two different things in a file
- Reply: Michael Schuster : "Re: Slightly OT: How to grep for two different things in a file"
- Reply: Steve O'Hara-Smith : "Re: Slightly OT: How to grep for two different things in a file"
- In reply to: Aryeh Friedman : "Slightly OT: How to grep for two different things in a file"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 08 Sep 2022 03:43:21 UTC
Aryeh Friedman <aryeh.friedman@gmail.com> writes: > I have 2 patterns I need to find in a given set of files. A file only > matches if it contains *BOTH* patterns but not in any given > relationship as to where they are in the file. In the past I have > used piped greps when both patterns are on the same line but in my > current case they are almost certainly not on the same line. > > For example my two patterns are "tid" (String variable name) and > "/tmp" [String literal] (i.e. the full string is the concatenation of > the two patterns I would do: > > grep -Ri tid src/java|grep -i /tmp > > But since /tmp is in a symbolic constant defined elsewhere (in a > different Java file) I need to find programmatically either the name > of the constant (has different names in different classes) and then do > the piped grep above with it or I need to look for the two patterns > separately and say a file is only accepted if it has both. > > P.S. The reason for this is I am attempting to audit my code base to > see what classes leave behind orphaned temp files. I use grep -l to just return a list of files that contain one pattern, and then grep -l for the second pattern on that list. That can be done in one line for your example as follows: grep -li /tmp `grep -liR tid src/java` I hope that gives you some ideas. -- Carl Johnson carlj@peak.org