Greetings, how do I perform the following in BSD sed?
sed \'s/ /\\n/g\'
From the man-page it states that \\n will be treated literally with
For ease of use, i personally often use
cr="\n"
# or (depending version and OS)
cr="
"
sed "s/ /\\${cr}/g"
so it stays on 1 line.
Another way:
sed -e 's/ /\'$'\n/g'
See here.
To expand on @sikmir's answer: In Bash, which is the default shell on Mac OS X, all you need to do is place a $
character in front of the quoted string containing the escape sequence that you want to get interpreted. Bash will automatically translate it for you.
For example, I removed all MS-DOS carriage returns from all the source files in lib/
and include/
by writing:
grep -lr $'\r' lib include | xargs sed -i -e $'s/\r//'
find . -name '*-e' -delete
BSD grep
would have interpreted '\r'
correctly on its own, but using $'\r'
doesn't hurt.
BSD sed
would have misinterpreted 's/\r//'
on its own, but by using $'s/\r//'
, I avoided that trap.
Notice that we can put $
in front of the entire string, and it will take care of all the escape sequences in the whole string.
$ echo $'hello\b\\world'
hell\world
In a shell, you can do:
sed 's/ /\
/g'
hitting the enter key after the backslash to insert a newline.