给定一个需要以有限的文本宽度显示的长字符串,*nix 中是否有一个命令行工具可以将单行字符串转换为多行字符串,并且每行的长度不超过给定的文本宽度?
例如,给定以下字符串
$ MYSTRING="Call me Ishmael. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world."
我想有点像这样的格式:
$ echo $MYSTRING | special-format-command --width=30
Call me Ishmael. Some years ag
o - never mind how long precis
ely - having little or no mone
y in my purse, and nothing par
ticular to interest me on shor
e, I thought I would sail abou
t a little and see the watery
part of the world.
答案1
您可以尝试以下fold
命令:
echo "$MYSTRING" | fold -w 30
答案2
fmt
(GNU coreutils 的一部分和 IIRC 其他版本包含在非 GNU *nixes 中,因此几乎可以肯定已经安装)的整个目的是重新格式化段落。
然而,有一个更好的工具,称为par
(段落重新格式化)。它可以做所有fmt
能做的事情,但有更多的选项来控制确切的输出格式。
许多真正好的事情之一par
是,它非常智能地处理电子邮件中的引用(甚至是多层引用) - 非常有用...我设置了 .vimrc,以便按 F5 通过 par 发送当前段落。
如果它不是为您的发行版打包的(它适用于 debian 和衍生品,也可能是其他发行版),则可以在以下位置找到 parhttp://www.nicemice.net/par/
答案3
这是一种使用的方法sed
:
sed 's/.\{30\}/&\
/g'
答案4
fold -s
是对你的问题的最短、最好的答案。
然而,尽管这些单一用途的工具在某些情况下很有效,但一般来说,您应该让您的编辑器执行此操作。
在 Emacs 中,您可以随意调整它。对于我来说,我使用visual-line-mode
(在模式行中显示为Wrap
次要模式),因为在一般情况下,我不希望在段落末尾以外的任何地方换行。
我想我应该告诉大家我是怎么做的。这不是“唯一”的方式,但它是一种方式;正如我提到的函数和变量,你的方法是将它们组合在一起并自动化,使它们为您服务。 (这是 Emacs,但对于任何足够高级的编辑器,都可以写类似的帖子。)
我说过,当我打字时,我会在视觉上将线条包裹起来,并且永远不会手动破坏它们。与往常一样,也有例外:例如,GNUS 不会将行超过一定宽度(以字符为单位)的帖子发送到 Usenet。所以,然后我使用M-q
.在 Emacs 中,M-q
运行命令fill-paragraph
。该变量fill-column
控制填充的宽度。举个例子,如果我写这个(在一行上)
This is a lot of text being written right now. The purpose is to overflow the line so I have have to line break it with M-q.
然后使用 Mq,我得到
This is a lot of text being written right now. The purpose is to
overflow the line so I have have to line break it with M-q.
(justify-current-line
两行的两倍),你得到
This is a lot of text being written right now. The purpose is to
overflow the line so I have have to line break it with M-q.
但是,我发现人们很少使用等宽字体来查看事物,因此使用它没有多大意义(除了我自己的观看乐趣)。如果你喜欢的话,你可以调整fill-paragraph
来填充和同时证明。您也可以让 Emacs 在您键入以下内容时始终为您执行此操作:auto-fill-mode
。 (我觉得压力很大,但这就是我。)
这可能看起来工作量很大,而且确实如此;但是一旦您完成了(完成此任务以及其他 1000 件事情),您就可以真正享受使用这些完全按照您喜欢的方式运行的工具的工作。