I've had to do this many hundreds of times over the years and never found it necessary to use specialist tools. The sequence with any editor is basically as ahi describes above.
First identify whatever character(s) mark a paragraph end and globally replace them with a unique marker - '|' will do the job but so will "&&&&" or any character combination that doesn't otherwise occur in the text.
You can now remove all the remaining return/newline characters BUT FIRST globally replace them with the same character plus a space. This is because some lines may end [space][newline] and others may not have the space. If you simply strip out the return/newline the last/first words will run together and if you don't notice immediately you're in a mess.
Now repeatedly global search for [return/newline][two spaces] and replace with [return/newline][one space]. When you no longer find the target you know that every line now terminates with [return/newline][space] so just replace that character combination with [space].Of course, as Jelby points out, if you know how to search for a return/newline with an arbitrary number of whitespace characters, you can do this in one operation.
You now have one impenetrable text block but all you have to do is globally replace your original marker, e.g. &&&&, with a paragraph return and hey presto.
|