Reputation: 23
I want to simulate AND operation in grep . List all the file files contains "Some Words" and contain "Some Other Words" anywhere in the file.
So far I tried #
egrep -lir '(Some Words)(Some Other Words)' *.myfiles
but it is not working.
Upvotes: 1
Views: 4911
Reputation: 439
By definition grep
is a tool looking for patterns line by line and printing the matching ones, as stated in its man page. There is no way to grep on multiple lines with a single grep
, unless doing as stated in Dan's answer where you use grep
together with GNU tools.
If instead we want to grep on the same line and the order in which "Some Words" and "Some Other Words" doesn't matter, you can run the following command:
egrep -lir "(Some Words.*Some Other Words)|(Some Other Words.*Some Words)"
If the order matters, then in the command above just remove the wrong order. For example if the right order is first "Some Words" and then "Some Other Words" the command should look like:
egrep -lir "Some Words.*Some Other Words"
Upvotes: 1
Reputation: 5251
Using GNU tools:
grep -lirZ string1 . | xargs -d '\0' grep -li string2
-l
) containing string1
-i
: case insensitive, -r
: recursive, -Z
: file list delimited by ascii null (a safe delimiter for file names)string2
.
refers to the current directory, which is searched recursivelyUpvotes: 3