BSD sed: Replace Space With Line Break
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
wrapping it into another set of square brackets (
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
echo 123 abc xyz | tr ' ' '\n'