Acho que a maneira mais direta é:
grep '^[^b]*bb[^b]*$' file1
Btw, para comandos como grep
que aceitam um argumento de nome de arquivo, é mais eficiente fazer
grep '^[^b]*bb[^b]*$' file1
ou
grep '^[^b]*bb[^b]*$' < file1
(o último funcionando se nenhum argumento de arquivo for suportado também)
do que
cat file1 | grep '^[^b]*bb[^b]*$'
e frequentemente mais flexível.