You can use this,
find . -name 'E*' -exec grep -Hl "sample" {} \;
Explanation:
-H : Print the file name for each match.
-H
-l : Suppress normal output
-l
You can combine find and grep:
find
grep
find . -name "E*" | xargs grep -nH "my text"
You can also use finds exec parameter instead of xargs. Take a look at its man mange for this: man find
exec
xargs
man find
If you want a max-depth for 1 layer, then i think most efficient way would be...
grep <pattern> E*
for multiple levels you can use like this
grep <pattern> */*/E*