我知道我可以使用类似cat test.txt | pr -w 80的格式将行换成80个字符的宽度,但这会在打印行的顶部和底部放置大量空间,并且在某些系统上不起作用

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

如果可以防止断字,则奖励积分。

#1 楼

您正在寻找

fold -w 80 -s text.txt



-w指示文本的宽度,其中80是标准宽度。
-s指示在空格处中断,而不是用言语表达。

这是标准方法,但是在其他系统中,则需要“ -c”而不是“ -w”。

评论


附带说明一下,为了很好地格式化电子邮件以进行纯文本回复,我使用:fold -s -w 80 email.txt | sed's /^.*$/>&/'

– Marcello Romani
2015年2月10日在21:10

@MarcelloRomani,因为要加上两个字符,所以不应该使用78的宽度吗?

–保姆
2015年2月26日在14:59

嗯...我想是的。感谢您指出了这一点 :)

– Marcello Romani
2015年2月27日,12:35

是否有类似fold之类的东西,可让您指定要包装的字符串?

–将
17年2月1日在2:30

请注意,折叠会破坏网址,而fmt不会。

–Skippy le Grand Gourou
17 Mar 28 '17 at 11:05

#2 楼

除了fold之外,还要看看fmtfmt尝试智能地选择换行符以使文本看起来不错。它不会打断长字,而是仅用空格包裹。它还会连接相邻的行,这对散文有利,但对日志文件或其他格式的文本不利。

评论


与fold相比,我特别喜欢fmt -t

–lkraav
2012年12月24日在21:26

#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.


评论


被低估的答案。在大多数系统上可用。好一个。

– Merc
16-10-4在2:09

我真的很高兴看到一个带有不同选项的真实文本示例。我一直在尝试编写Python版本的wrap,但是对长字处理不满意。具有比指定单词长的换行和fwt选项非常好。

–bballdave025
20年9月4日在18:31

#4 楼

另一个(鲜为人知的)工具可以满足您的需求,它是来自GNU Talkfilters的wrap

wrap -w 80 < textfile


也(不在主题范围内):


,但这会在打印行的顶部和底部留出大量空间


调用-t来省略标题/尾部时添加pr

   -t, --omit-header
          omit page headers and trailers


#5 楼

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

评论


当前该网站已关闭,有Internet存档和Google的缓存,但这仍然说明了为什么重要的不仅仅是发布链接,您还可以至少发布官方文档中的示例。

–phk
16 Dec 27 '16:31

#6 楼

fold -w 100 -s text.txt


对我有用,因为我需要将每一行拆分成100个字符

评论


您的答案还补充了其他人没有的答案?

–乔纳森·H
18年4月7日在16:53