sed insert line command OSX

Here's how to do it in one line syntax

sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file
  • duplicate second line: 2s/^//p;

  • replace new line with your text: 2s/^.*/text to insert/


On OSX you can use:

sed -i.bak '3i\
text to insert
' file

A one-liner for OSX employing ANSI-C quoting:

sed -i '' '3i\'$'\n''text to insert' file

Adapted from https://stackoverflow.com/a/24299845/901597


You should put a newline directly after the \:

sed '3i\
text to insert' file

This is actually the behaviour defined by the POSIX specification. The fact that GNU sed allows you to specify the text to be inserted on the same line is an extension.


If for some reason you need to use double quotes around the sed command, then you must escape the backslash at the end of the first line:

sed "3i\\
text to insert" file

This is because a double-quoted string is processed first by the shell, and \ followed by a newline is removed:

$ echo "abc\
def"
abcdef