Insert multiple lines of text before specific line using Bash

MeanwhileInHell picture MeanwhileInHell · Aug 14, 2015 · Viewed 20.1k times · Source

I am trying to insert a few lines of text before a specific line, but keep getting sed errors when I try to add a new line character. My command looks like:

sed -r -i '/Line to insert after/ i Line one to insert \\
    second new line to insert \\
    third new line to insert' /etc/directory/somefile.txt

The error that is reported is:

sed: -e expression #1, char 77: unterminated `s' command

I've tried, using \n, \\ (as in the example), no character at all, just moving the second line to the next line. I've also tried something like:

sed -r -i -e '/Line to insert after/ i Line one to insert'
    -e 'second new line to insert'
    -e 'third new line to insert' /etc/directory/somefile.txt

EDIT!: Apologies, I wanted the text inserted BEFORE the existing, not after!

Answer

anubhava picture anubhava · Aug 14, 2015

This should work:

sed -i '/Line to insert after/ i Line one to insert \
second new line to insert \
third new line to insert' file