BASH:在文本之间查找换行符并替换为两个换行符

BASH: Find newlines in between text and replace with two newlines

我希望以编程方式编辑 .txt 文件的换行符。期望的行为是文本行之间的任何单个换行符都将变成两个换行符。

编辑(@kaan 澄清):由一个换行符分隔的行应由两个换行符分隔。任何已经被两行或更多行分隔的行都应保持原样

编辑(上下文):我正在使用 .fountain 语法和一个名为 afterwriting 的 npm 模块,该模块将文本文件导出为脚本格式作为 pdf。使用包打印为 pdf 时,仅由一个新行分隔的文本行不能正确 space。所以我想自动将单个换行符转换为双,因为我也不想在我正在转换的所有文件中添加两个新行

例如,输入示例如下所示:

File with text in it

A new line

Another new line



Line with three new lines above

One last new line

会变成

File with text in it


A new line


Another new line



Line with three new lines above


One last new line

任何关于如何在 bash 脚本中实现这一点的想法都将不胜感激

这是一种使用 sed 的方法:

  • 读取整个文件(自 normal sed behavior will remove all newlines
  • 寻找一个单词边界 (\b),然后是两个换行符(\n\n – 一个用于结束当前行,然后一个是单个空行),然后是一个单词边界( \b)
  • 对于任何匹配项,在其中添加一个额外的换行符。

data.txt 中使用您的示例文本,它看起来像这样:

sed -n 'H; ${x; s/\b\n\n\b/\n\n\n/g; p}' < data.txt | tail -n +2

(编辑:添加 | tail -n +2 以删除开头插入的额外换行符)

这可能对你有用 (GNU sed):

sed '/\S/b;N;//{P;b};:a;n;//!ba' file

此解决方案将另一行附加到遇到的第一个空行。如果附加的行不为空,它会打印第一行并退出,从而使空行加倍。否则,如果附加的行是空的,它会打印它们,然后再打印任何空行,直到遇到非空行。