如何以特定的列大小换行文本?

如何以特定的列大小换行文本?

我知道我可以使用类似cat test.txt | pr -w 80将行换行为 80 个字符宽的方法,但这会在打印行的顶部和底部留下大量空间,并且在某些系统上无法正常工作

强制长行文本文件以一定宽度换行的最佳方法是什么?

如果你能阻止它破词,那就加分了。

答案1

您正在寻找

fold -w 80 -s text.txt
  • -w 表示文本的宽度,其中 80 是标准宽度。
  • -s 告诉在空格处中断,而不是在单词处中断。

这是标准方式,但还有其他系统需要“-c”而不是“-w”。

答案2

另外fold,看看fmtfmt尝试智能地选择换行符以使文本看起来更好。它不会破坏长单词,而是仅用空格换行。它还会连接相邻的行,这对散文有好处,但对日志文件或其他格式化文本不利。

答案3

$ cat shxp.txt

O, they have lived long on the alms-basket of words, I marvel thy
master hath not eaten thee for a word; for thou art not so long by the
head as honorificabilitudinitatibus: thou art easier swallowed than a
flap-dragon.

1​) 确保固定行宽并断字:

fold -w 20 <shxp.txt

O, they have lived l
ong on the alms-bask
et of words, I marve
l thy master hath no
t eaten thee for a w
ord; for thou art no
t so long by the hea
d as honorificabilit
udinitatibus: thou a
rt easier swallowed
than a flap-dragon.

2​) 确保固定的行宽和非凡的断字功能。仅当单词太大而无法排成一行时,该单词才会被破坏:

fold -sw 20 <shxp.txt

O, they have lived
long on the
alms-basket of
words, I marvel thy
master hath not
eaten thee for a
word; for thou art
not so long by the
head as
honorificabilitudini
tatibus: thou art
easier swallowed
than a flap-dragon.

3​) 承诺固定行宽,没有任何断字。如果单词太大而无法容纳在一行中,它仍然保持原样,所以最后有些行的大小可能比您需要的大:

fmt -w 20 <shxp.txt

O, they have
lived long on the
alms-basket of
words, I marvel
thy master hath
not eaten thee
for a word; for
thou art not so
long by the head as
honorificabilitudinitatibus:
thou art easier
swallowed than
a flap-dragon.

请注意,fmt与 不同的是,它还尝试平衡参差不齐的段落线fold -s

4)也许,由于程序内部使用了特殊的标记语言和格式化实用程序,这是解决问题的最复杂的印刷方法man。额外定制的巨大可能性:

2>/dev/null nroff <(echo .pl 1 ; echo .ll 20) shxp.txt

O,  they  have lived
long  on  the  alms‐
basket  of  words, I
marvel  thy   master
hath  not eaten thee
for a word; for thou
art  not  so long by
the head as  honori‐
ficabilitudinitati‐
bus: thou art easier
swallowed   than   a
flap‐dragon.

.pl 1 罗夫标记将页面高度设置为单行,从而有效地禁用分页。

.ll 20将行长度设置为 20 个字符。

将标记放在单独的文件中将简化命令:

$ cat markup.roff
.pl 1
.ll 20
$ 2>/dev/null nroff markup.roff shxp.txt

为了nroff使用 Unicode,可以使用以下命令预先转换文本preconv

$ 2>/dev/null nroff markup.roff <(preconv shxp.txt)

答案4

有关更多格式选项,请查看par--http://www.nicemice.net/par/

相关内容