As expressões regulares não são a melhor ferramenta para esse tipo de trabalho. Eu faria algo como:
perl -CLASD -lne '
BEGIN{$l0{$_}++ for (split "", shift)}
%l = %l0; for (split "") {next LINE unless $l{$_}--}
print' aacrt < /usr/share/dict/words
Ou desde (pelo menos em francês e inglês e algumas outras línguas usando o alfabeto latino ), o scrabble tem apenas o 26 letras maiúsculas de A a Z (été é escrito como ETE, cœur como COEUR), com GNU iconv
:
iconv -t us//TRANSLIT < /usr/share/dict/words |
perl -CLASD -lne '
BEGIN{$l0{$_}++ for (split "", uc shift)}
%l = %l0; for (split "", uc $_) {next LINE unless $l{$_}--}
print' croeu
Ou para enviar na forma original:
perl -CLASD -MText::Unidecode -lne '
BEGIN{$l0{$_}++ for (split "", uc shift)}
%l = %l0; for (split "", uc unidecode $_) {next LINE unless $l{$_}--}
print' croeu < /usr/share/dict/word