This will work:
echo "test1;test2;test3;test4" | sed 's/;/'$' ''
/g'
Two issues
1) in sed, "However, if you are inserting a new line, don't use " " - instead insert a literal new line character" (see:
http://www.grymoire.com/Unix/Sed.html section "Using newlines in sed scripts"
2) in bash, to insert a carriage return, use $' '
Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard. Backslash escape sequences, if present, are decoded
as follows:
a alert (bell)
backspace
e an escape character
form feed
new line
carriage return
horizontal tab
v vertical tab
\ backslash
\' single quote
nn the eight-bit character whose value is the octal value
nnn (one to three digits)
xHH the eight-bit character whose value is the hexadecimal
value HH (one or two hex digits)
cx a control-x character
The expanded result is single-quoted, as if the dollar sign had not
been present.
A double-quoted string preceded by a dollar sign ($) will cause the
string to be translated according to the current locale. If the cur-
rent locale is C or POSIX, the dollar sign is ignored. If the string
is translated and replaced, the replacement is double-quoted.