git grep
Here is the syntax using git grep
combining multiple patterns using Boolean expressions:
git grep -e "life" --and -e "happy" --and -e "horse"
The above command will print lines matching all the patterns at once.
If the files aren't under version control, add --no-index
param.
Search files in the current directory that is not managed by Git.
Check man git-grep
for help.
grep
Normally grep
with -f
parameter will print lines with at least one pattern, e.g.
grep -f args.txt file.txt
In your case it won't work.
So to print lines which matches all patterns at the same time, you can try this command:
while read n text; do [ $n -eq $(wc -l < args.txt) ] && echo $text; done < <(while read patt; do grep "$patt" text.txt; done < args.txt | sort | uniq -c)
Explanation:
- The inner
while
loop will print all lines which matches at least one pattern in text.txt
using pattern list from args.txt
file.
- Then this list is sorted (
sort
) and counted for number of occurrences (uniq -c
).
- The outer
while
loop will print only lines which have the same number of occurrences that number of patterns in args.txt
(which is 3).
Another approach would be to remove all lines which does not match at least one pattern.
Here is the solution using Ex/Vim editor changing the file in-place:
while read patt; do ex +"v/$patt/d" -scwq text.txt; done < args.txt
Note: This will remove the unneeded lines from the file it-self.
Here is shorter version which will print the result on the screen only:
ex $(xargs -I% printf "+v/%/d " < args.txt) +%p -scq! text.txt
Change +%p -scq!
to -scwq
to save it in-place into the file.
And here is the solution by defining a shell alias:
alias grep-all="</dev/stdin $(xargs printf '|grep "%s"' < args.txt)"
Sample usage:
grep-all file.txt
Related:
args
are there? – shadowtalker Dec 22 '16 at 13:03args
file to be printed? Or any of the lines? Either way,grep
may be a useful command for you to investigate (man grep
) – Chris Davies Dec 22 '16 at 13:12args
. – Chris Davies Dec 22 '16 at 13:31grep
, this isn't and it operates on the files as input, so the questions are a bit different, they could lead to different answers. – kenorb Dec 22 '16 at 14:44