Regardless of the appeal to unix philosophy in their docs, sd has never stuck with me because it doesn't natively support replace across a project/ multiple files, and that's what you always want to do. Instead I pipe `rg -R --json` output into a script (rg does do replacement, but only on the stdout, not in-place)
I'm not sure I understand what you're saying. You can pass a list of files to sd, `sd before after **/*.py` to replace in all the python files in your project. That's about as native of a replace across multiple files you could possibly want.