this was an unmonitored copy and replace, but I was quite careful about
it. There were over 10,000 str: entries that needed to be modified.

Before beginning this search/replace, I had already ensured that no
single line in the masterlist had an odd number of single quote marks
using this regex:

^[^'\n]*'[^'\n]*('[^'\n]*'[^'\n]*)?('[^'\n]*'[^'\n]*)?('[^'\n]*'[^'\n]*)?('[^'\n]*'[^'\n]*)?('[^'\n]*'[^'\n]*)?\n

Then I search-replaced the str: fields using this regex:
find: (str: )([^'\n].*[^'\n])\n
replace: \1'\2'\n

I've looked it over as much as can be expected and all seems fine to me.