Home > OS >  grep AND Operations
grep AND Operations

Time:02-02

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 ried #egrep -lir '(Some Words)(Some Other Words)' *.myfiles but it is not working.

Thanks

CodePudding user response:

Using GNU tools:

grep -lirZ string1 . | xargs -d '\0' grep -l string2
  • The first grep lists files (-l) containing string1
  • -i: case insensitive, -r: recursive, -Z: file list delimited by ascii null (a safe delimiter for file names)
  • Pipe the list to xargs, with null delimiter, to pass it to the second grep
  • The second grep filters the list for files containing string2
  • . refers to the current directory, which is searched recursively

CodePudding user response:

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 do running 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"
  •  Tags:  
  • Related