BSD sed: Replace Space With Line Break
Recently, BSD sed
caused me much frustration for a very simple replace
operation: spaces to line breaks (or newlines).
First, there is the problem that literal spaces are not always understood. You
may have to use a character class ([:space:]
) but that does not work reliably
either. Not to mention, you have to specially escape this for sed
, by
wrapping it into another set of square brackets ([[:space:]]
). Following
that, a simple PCRE \n
for a newline would be too much. Because it is. So
that the final result looks like this:
echo 123 abc xyz | sed 's/[[:space:]]/\\
/g'
Yes, that’s right. You have to literally enter the Enter key after a double
escape. Shell support is questionable and it’s very unfortunate for scripting,
so there must be a better way. And there is: just use tr
and skip all the
special sauce.
echo 123 abc xyz | tr ' ' '\n'