As a quick note today, I have been converting parts of the Scala Cookbook from a plain text format to a Markdown format, and as part of that I needed to add some newline characters to add spacing to the document. This wouldn’t be bad if it was a few pages, but it’s hundreds of pages, so I decided to use the Unix sed
command to do the work.
Note: What I gloss over in this example is that trying to use the newline character (
\n
) as a replacement string doesn’t work withsed
on Mac OS X, at least not in Mac OS X 10.9 or 10.10.
Solution
Skipping right to the solution, this sed
command did the trick of (a) converting the word “Problem” that’s on a line by itself to being a Markdown “Header 2” tag, with a newline added before and after the word “Problem”:
s/^Problem$/\ ## Problem\ /
The \
characters at the end of each line let you continue the replacement text onto multiple lines, and that’s what inserts the newline characters into the sed
output.
My full Mac OS X sed script
If it helps to see this in the context of the complete sed
script, here’s the source code for the full script:
s/^Problem$/\ ## Problem\ / s/^Solution$/\ ## Solution\ / s/^Discussion$/\ ## Discussion\ / s/^See Also$/\ ## See Also\ / # add a newline to a trailing ':' character s/^\(.*\)\:$/\1:\ / # add a newline after '}' on a line by itself s/^}$/}\ / # add newline before 'scala>' s/^\(scala> .*\)/\ \1/ # replace bullets s/•/*/
If you know sed
, you can see that I add several newline characters in that script.
I run this sed
script on my Mac OS X system like this:
sed -f sed.cmds Chapter12.md > Ch12.txt
The result
The “Problem” line ends up converting text that looks like this:
foo Problem bar
to this:
foo ## Problem bar
As shown, it adds a newline character before and after the “Problem” line.
In summary, if you wanted to see how to add a newline character to some text when using sed
on Mac OS X, I hope this helps.