我习惯于每句话写一行,因为我通常将内容编译为 LaTeX,或者以其他格式编写,其中换行符会被忽略。我使用一个空行来表示一个新段落的开始。
现在,我有一个以这种风格编写的文件,我只想将其作为纯文本发送。我想删除所有单换行符,但保持双换行符完好无损。这就是我所做的:
sed 's/^$/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt
Run Code Online (Sandbox Code Playgroud)
这将用我确信不会出现在文件中的一些文本替换空行:NEWLINE然后它摆脱了所有换行符awk(我在某个网站上发现了这个技巧),然后NEWLINE用必要的两个换行符替换了s。
这似乎是做一件非常简单的事情的冗长方法。有没有更简单的方法?此外,如果有一种方法可以用单个空格替换多个空格(有时出于某种原因会出现),那也很好。
我使用 emacs,所以如果有一些 emacs 特定的技巧是好的,但我宁愿看到一个纯粹的sed或纯粹的awk版本。