Nem régen volt hasonló problémám. Én azzal zártam rövidre, hogy a bash változó-helyettesítést használtam:
echo ${a//[^]q...89\[().-]/_}
Ez mindenféle locale-beállítással és ékezetes betűkkel is működik - viszont gondolom karakter-osztályokat nem használhatsz, mert ez nem regexp, csak messziről néz ki úgy.
szaszi