diff
funciona por linha. Então, se as linhas diferem até mesmo apenas por um caractere, então diff as considera diferentes.
Uma coisa que você pode fazer no seu caso é transformar seus dados de entrada de forma que cada caractere esteja em sua própria linha. O comando fold
ajuda com isso. Então você poderia fazer algo como:
$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$
Isso só funciona se seus arquivos de entrada realmente tiverem apenas uma linha cada.
Não sei se esse formato de saída é útil para você. Se você quer literalmente a string "aaaa", e você está absolutamente garantido que a diferença é somente em um lugar nas linhas de entrada, então você poderia canalizar a saída acima através de awk
:
$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$
$