How to find the last match of a string in a bunch of files

1

I have a bunch of files, I'd like to find the last match of a string in each of them.

grep text *.file gives me all the matches not the last ones.

ls *.file | xargs grep text | tail -n 1 gives me the last line of the last file that matches.

So what I think I want is a way to say:

ls *.file | (xargs grep text | tail -n 1)

But I'm not sure how to do this, or if it's possible.

Joe

Posted 2011-11-16T15:16:51.677

Reputation: 2 942

Answers

2

Use tail -n 1 in a for loop. For example:

for name in *.file; do
    grep -H text "$name" | tail -n 1
done

(The -H option will make grep always print the file name, even if only one file was given.)

user1686

Posted 2011-11-16T15:16:51.677

Reputation: 283 655

0

There is a oneliner over a tac commad, that output file from end till begin:

find . -name *.log -exec sh -c "tac '{}' | grep -Hm1 text " \;

Oleg Svechkarenko

Posted 2011-11-16T15:16:51.677

Reputation: 367