Вы не сказали этого, но я подозреваю, что вы просматриваете дерево каталогов.
Возможно, это не самое элегантное решение, но вы можете использовать вывод 'find'.
Я часто нахожу себя рекурсивно копирующим дерево каталогов следующим образом:
grep <needle> `find . \( -name '*.cpp' -o -name '*.h' \) -print`
Вы, конечно, можете сделать что-то вроде:
grep <needle> `find . \! -name '.??*swp' -print`