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

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.

2 Answers

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.)

1

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 " \; 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like