2

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.

Initial attempt:

cat filename | grep -lr *

However this is not returning any output.

Can anyone give me some directions on the best approach?

2 Answers 2

4

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
3
  • 1
    Are you sure about that peth? Pretty sure it finishes after the last line of filename.
    – Pricey
    Jun 2, 2011 at 9:21
  • Ah apologies, never saw the sneaky edit. Never used the pipe up there before either..
    – Pricey
    Jun 2, 2011 at 13:01
  • You also have to check the end of line character used in your file. It should be \n (line feed) and not \r (carriage return).
    – Pierre
    Apr 21, 2020 at 9:05
2

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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .