如何解开 80 个字符的文本

Szy*_*łko 6 linux unix script

Internet 上的许多文本文件在行达到第 80 个字符之前进行分词。我了解使用 80 个字符终端的用户需要这样做。然而,我喜欢将较长的文章发送到我的 Kindle,但这些文件在上面看起来很糟糕。看这张图:这是 LWN 老问题,它会自动提取并组装到 .mobi 中

当文本在行中间结束时,80 个字符的分割清晰可见。

我的问题是:如何解开/解开这些线?当然,“手工”方法不在讨论范围内。编辑:让我们澄清一下:我要求脚本或其他可以从 Linux 终端运行的方法。bash/ruby/python/perl/awk 没问题。

另外,假设我只有明文,LWN 只是示例。

Att*_*igh 4

使用的答案fmt似乎是包装文本而不是展开它。

一般来说,这可能是一个难题。例如,区分故意提前完成的相邻文本行(例如要点)和自由流动文本的相邻行可能需要一些上下文。区分跨行分割的连字符单词和分割单词也很困难。

然而,散文的常见形式是相邻的换行文本形成一个由单个空换行符分隔的段落。

这可以使用以下相当复杂的sed单行代码来展开:

sed -n '/.+/ H;  /^$/ { x; s/\n/ /g; s/$/\n/ ; p}'
Run Code Online (Sandbox Code Playgroud)

或者,您可能更喜欢小型 Python 脚本,特别是如果您要处理一些特殊情况:

#!/usr/bin/python3

import sys
paragraph = []

for line in sys.stdin:
    line = line.strip()
    if line:
        paragraph.append(line)
    else:
        print(' '.join(paragraph).replace('  ', ' '))
        paragraph = []
if paragraph:
    print(' '.join(paragraph).replace('  ', ' '))
Run Code Online (Sandbox Code Playgroud)

如果您发现自己添加了特殊的大小写,那么您希望找到换行文本的来源并以非换行形式获取它。