fork download
  1. #!/bin/bash
  2.  
  3. # ideone boilerplate: run in temp dir
  4. t=$(mktemp -d -t ideone.XXXXXXXX) || exit
  5. trap 'rm -rf "$t"' ERR EXIT
  6. cd "$t"
  7.  
  8. cat <<\: >file.txt
  9. *some code*
  10. *some code*
  11. string_to_replace
  12. *some code*
  13. :
  14.  
  15. replacement='line number 1
  16. line number 2
  17. line number 3% & then \some'
  18.  
  19. # Generate a sed script out of the replacement
  20. # Escape any regex specials and newlines, and wrap in
  21. # s%string_to_replace%...%g
  22. sed -e 's/[&%\\]/\\&/g' \
  23. -e '$!s/$/\\/' \
  24. -e '1s/^/s%string_to_replace%/' \
  25. -e '$s/$/%g/' <<<$replacement |
  26. # save result so we can display it
  27. tee generated.sed |
  28. # pass to second sed instance
  29. sed -f - file.txt
  30.  
  31. tail /dev/null generated.sed
Success #stdin #stdout 0.01s 5520KB
stdin
Standard input is empty
stdout
*some code*
*some code*
line number 1
line number 2
line number 3% & then \some
*some code*
==> /dev/null <==

==> generated.sed <==
s%string_to_replace%line number 1\
line number 2\
line number 3\% \& then \\some%g