You can use * to place backups of original files in another directory when using the -i option with GNU sed. Consider these two sample input files in the current directory:

$ cat f1.txt
good morning
that was good, just too good!
$ cat f2.txt 
goodie goodbye

Create a backups directory and use * under this directory as a placeholder for the filenames passed to the sed command.

$ mkdir backups
$ sed -i'backups/*' 's/good/nice/' f1.txt f2.txt
$ ls backups/
f1.txt  f2.txt

# modified content
$ cat f1.txt
nice morning
that was nice, just too good!
$ cat f2.txt
niceie goodbye

# backed-up original content
$ cat backups/f1.txt 
good morning
that was good, just too good!
$ cat backups/f2.txt
goodie goodbye

Since * expands to the name of the input files, you can also use this feature when you need to add a prefix for the backups.

$ sed -i'bkp.*' 's/green/yellow/' colors.txt

$ ls *colors*
bkp.colors.txt  colors.txt

info The * trick works with Perl as well, see In-place file editing chapter from my Perl one-liners ebook for examples.

Video demo:


info See my CLI text processing with GNU sed ebook if you are interested in learning about the GNU sed command in more detail.