'grep AND Operations

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.



Solution 1:[1]

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"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1