Ezt próbáld ki:
echo $file | LC_ALL=C sed 's/[^A-Za-z0-9.]/_/g'
Szerintem az a bibi, hogy a sed mivel UTF-8 környezeti változókkal fut, ezért feltételezi az inputjáról hogy az valid UTF-8, márpedig nem az. Így viszont ASCII-t fog feltételezni. Ha ez sem megy (mert a 128 fölötti byte-okon kiakad), akkor LC_ALL=en_US.ISO8859-1 vagy valami ilyesmi...