Bash – Long string insertion with sed

bashsedunix

I am trying to use this expression to insert the contents of one text file into another after a give string. This is a simple bash script:

    TEXT=`cat file1.txt`
    sed -i "/teststring/a \
    $TEXT" file2.txt

This returns an error, "sed: -e expression #1, char 37: unknown command: `M'"

The issue is in the fact that the contents of file1.txt are actually a private certificate so it's a large amount of text and unusual characters which seems to be causing an issue. If I replace $TEXT with a simple ASCII value it works but when it reads the large content of file1.txt it fails with that error.

Is there some way to carry out this action? Is my syntax off with sed or my quote placement wrong?

Best Answer

Use r to read the certificate file, not a to append the string -- sed is confused because you'd first need to escape newlines and special characters in the string to append. You do not need to escape any text in the file -- sed just reads and appends it.

sed -i "/teststring/r file1.txt" file2.txt
Related Topic