in reply to REGEX with input file

You've said the substitution is changing the output to O_PREFIX=NEWOLD where you want O_PREFIX=NEW, for some value of NEW and OLD. Perhaps whatever follows O_PREFIX doesn't actually match \w+? (Though it would have to at least start with a character matching \w, or the substitution wouldn't happen at all.)

\w usually matches any of A-Z, a-z, 0-9, or _. If you have a larger character set you need to match, \w is not the right choice. Perhaps you could try it ass/O_PREFIX=.*/O_PREFIX=$newUser/ (which would replace from = up to the end of the line) or s/O_PREFIX=\S+/O_PREFIX=$newUser/ (which would replace from = up to a whitespace character (space, formfeed, tab, linefeed, or carriage return)).

(What \w matches may be expanded if in the scope of use locale or matching on Unicode data.)