#!/bin/bash

# ideone boilerplate: run in temp dir
t=$(mktemp -d -t ideone.XXXXXXXX) || exit
trap 'rm -rf "$t"' ERR EXIT
cd "$t"
 
cat <<\: >file.txt
*some code*
*some code*
string_to_replace
*some code*
:
 
replacement='line number 1
line number 2
line number 3% & then \some'
 
# Generate a sed script out of the replacement
# Escape any regex specials and newlines, and wrap in
# s%string_to_replace%...%g
sed -e 's/[&%\\]/\\&/g' \
    -e '$!s/$/\\/' \
    -e '1s/^/s%string_to_replace%/' \
     -e '$s/$/%g/' <<<$replacement |
# save result so we can display it
tee generated.sed |
# pass to second sed instance
sed -f - file.txt

tail /dev/null generated.sed