The r command accepts a filename as argument and when the address is satisfied, entire contents of the given file is added after the matching line. This is a robust way to add multiline text literally.

$ cat ip.txt
    * sky
    * apple
$ cat fav_colors.txt
deep red
yellow
reddish
brown

# space between r and filename is optional
# adds entire contents of 'ip.txt' after each line containing 'red'
$ sed '/red/r ip.txt' fav_colors.txt
deep red
    * sky
    * apple
yellow
reddish
    * sky
    * apple
brown

The e flag is the easiest way to insert file contents before the matching lines. Similar to the r command, the output of an external command (cat in the below example) is inserted literally.

$ sed '/red/e cat ip.txt' fav_colors.txt
    * sky
    * apple
deep red
yellow
    * sky
    * apple
reddish
brown

info See Adding content from file chapter from my GNU sed ebook for many more examples, gotchas, details about the R command and so on.

Video demo:


info See also my CLI text processing with GNU sed ebook.