Thanks! I have tried using bash substitution to solve it but failed (I just learned the difference between "#" and "##").
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V...
Also a couple mnemonic hints:
% vs #. On US keyboards, # is shift-3 and is to the left of % which is shift-5. So # matches on the start (left) and % matches on the end (right).
# vs ## (or % vs %%). Doubling the character makes the match greedy. It's twice a wide so it needs to eat more.
Bash also supports ${parameter/pattern/string} and ${parameter//pattern/string} (and a bunch others besides) which are not POSIX:
https://www.gnu.org/software/bash/manual/html_node/Shell-Par...