The problem with this command is that when I use ^ac$ the command interprets it as starting with 'ac' instead of starting with 'a'.
Não realmente. Como você usou a $ anchor , está pesquisando as linhas que terminam logo após a string ac , portanto, apenas linhas contendo exatamente ac e nenhum outro caractere são correspondidos.
Para permitir qualquer caractere entre essas letras, use a regex para qualquer contagem de qualquer caractere: .*
(Ou se você quiser permitir apenas um caractere como em abc no exemplo, use . sem quantificadores como * .)
A propósito, você pode simplesmente deixar de fora a opção -E para este regex, já que ele não envolve qualquer sintaxe que seja diferente nessas duas variantes.
Então o resultado é:
grep '^a.*c$' newfile