grep for multiple strings in file on different lines (ie. whole file, not line based search)?
Solution 1:
You can use:
grep -l Dansk * | xargs grep -l Norsk | xargs grep -l Svenska
If you want also to find in hidden files:
grep -l Dansk .* | xargs grep -l Norsk | xargs grep -l Svenska
Solution 2:
Yet another way using just bash and grep:
For a single file 'test.txt':
grep -q Dansk test.txt && grep -q Norsk test.txt && grep -l Svenska test.txt
Will print test.txt
iff the file contains all three (in any combination). The first two greps don't print anything (-q
) and the last only prints the file if the other two have passed.
If you want to do it for every file in the directory:
for f in *; do grep -q Dansk $f && grep -q Norsk $f && grep -l Svenska $f; done
Solution 3:
grep –irl word1 * | grep –il word2 `cat -` | grep –il word3 `cat -`
-
-i
makes search case insensitive -
-r
makes file search recursive through folders -
-l
pipes the list of files with the word found -
cat -
causes the next grep to look through the files passed to it list.