How is this:
tail -n +1 *.txt | grep foo
slightly modified to show the filename?
When it\'s not piped, the filename is conveniently pa