I’ve only used M-x occur-edit, I didn’t know there was the same sort of thing for grep!
wgrep is also possible in many (not all) grep-like buffers, for instance rg.el for ripgrep supports it: https://github.com/dajva/rg.el
I was originally introduced to this style of find and replace by the find plugin for kakoune. Once I moved to emacs, wgrep was a must. Now that I’m on Neovim, I use replacer.
In all cases the flow is the same: populate a search results buffer using the existing mechanisms in the editor; make whatever changes you want to see in the buffer itself; commit the changes. It’s light years better than any other global find and replace approach I’ve used.
LOL I’ve been rolling my own (point-at-bol) and (point-at-eol) for every package my whole life and here I see they are built in. So much to know…