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 with
sedon Mac OS X, at least not in Mac OS X 10.9 or 10.10.
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\ /
\ 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
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 “Problem” line ends up converting text that looks like this:
foo Problem bar
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.