The pattern
'ch '[1-9][!0-9]*'- file.txt'
would match all filenames that needs changing (out of the ones that you show), i.e. any filename that starts with `ch `, followed by a digit between 1 and 9, followed by something that is not a digit. After that, we allow for any characters whatsoever, and the names must end with `- file.txt`.
We can loop over these files with
for name in 'ch '[1-9][!0-9]*'- file.txt'; do
...
done
The objective is now to insert a `0` after the `ch ` bit. This can be done by stripping the `ch ` substring off, and replacing it with `ch 0`:
for name in 'ch '[1-9][!0-9]*'- file.txt'; do
newname='ch 0'${name#ch }
done
The `${name#ch }` parameter substitution would expand to `2 - file.txt` if `$name` contained `ch 2 - file.txt` (it would remove the prefix `ch `).
After this, you could just rename the file:
for name in 'ch '[1-9][!0-9]*'- file.txt'; do
newname='ch 0'${name#ch }
printf 'would rename "%s" into "%s"\n' "$name" "$newname"
# mv -i "$name" "$newname"
done
Remove the `#` on the line with the commented out `mv` command after running the loop once to see that it does the correct thing.