Ваша проблема в том, что helloaaaa
соответствует из-за последних трех a
s:
helloaaaa
===
Чтобы избежать этого, вам нужно убедиться, что предыдущий символ не является a
:
grep -E '[^a](aa)*a$' filename
Здесь я предполагаю, что линия не совсем a
с.Если вся строка может быть a
s, то вместо этого вы можете использовать это регулярное выражение:
grep -E '(^|[^a])(aa)*a$' filename