Wondering if anyone can help me, I'm very rusty with bash and seem to hit a bit of an impasse.

I'm storing a list of strings in a file and would like to read the file and pipe each line returned to grep which in turn searches a directory for files containing the string.

Initially attempt:

cat filename | grep -lr *

However this is not returning any output.

Can anyone give me a bit of steer on how best to approach this?

link|improve this question
feedback

2 Answers

I would try this.

cat filename | while read line ; do grep -lr "$line" * ; done

You could also pipe it to "sort -u" so you don't get duplicate.

link|improve this answer
feedback

Avoid that useless use of cat. You can of course solve this with xargs and the like. But that's over-complex compared to a simple while loop.

while read i 
do
    grep -r -- "$i" directory/
done < filename
link|improve this answer
1  
Are you sure about that peth? Pretty sure it finishes after the last line of filename. – PriceChild Jun 2 '11 at 9:21
Ah apologies, never saw the sneaky edit. Never used the pipe up there before either.. – PriceChild Jun 2 '11 at 13:01
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.