I have a sed replacement command that I would like to be compatible with BSD sed
as well as GNU sed
. Extended regular expressions are not an issue as I do not need them in this case. My primary problem is difference in the way that the two sed
s interpret character escape sequences in the replacement strings. My replacement string contains tabs and newlines and I'd like them to be visible in the command strings for ease of maintenance, however, BSD sed
doesn't interpret the escape sequences and GNU sed
does. What is the appropriate way to instruct sed
to interpret these escape sequences on BSD? The following two snippets epitomize my problem:
GNU sed
echo ABC | sed 's/B/\n\tB\n'
yeilds
A
B
C
BSD sed
echo ABC | sed 's/B\n\tB\n'
yields
AntBnC
Clearly, \n
and \t
aren't interpreted as escape sequences by BSD sed
Now, to my question. According the BSD sed
manpage:
To specify a newline character in the replacement string, precede it with a backslash.
Does this imply that I'd need to precede a literal newline by a backslash? What is the appropriate way to instruct sed
to interpret escape sequences like \n
in the replacement text?
sed
. In the end it probably will make sense to use awk. So what do you think about the interpretation of the BSD sed manpage I quoted? – ephsmith Jul 04 '12 at 17:16