No. Very few commands have this functionality, GNU awk (gawk) only added it recently, and even for those commands that have an -i or equivalent, all it does is create a temp file in the background.
So, the way to do this is:
tr -sc '[:alnum:][:punct:]' ' ' <file >newfile && mv newfile file
You could whip up a little function if you need this often:
tri(){
tmpFile=$(mktemp)
echo "$@"
case $# in
## You've given tr options
4)
trOpts="$1"
set1="$2"
set2="$3"
inputFile="$4"
;;
## No options, only set1 and set2 and the input file
3)
set1="$1"
set2="$2"
inputFile="$3"
;;
## Something wrong
*)
echo "Whaaaa?"
exit 1
;;
esac
tr "$trOpts" "$set1" "$set2" < "$inputFile" > "$tmpFile" &&
mv "$tmpFile" "$inputFile"
}
You'd then run this as:
tri -sc '[:alnum:][:punct:]' ' ' file
Note how, unlike the real tr, this expects the file name as an argument and not as redirected input (<file), and that options be specified together as shown above (and not like -s -c).