将句子包装成列

将句子包装成列

我正在寻找一种方法来获取句子并包装它们。使用类似的东西column不是我想要的,因为在我的场景中,80 个字符中会有多个句子列。

有什么办法可以做到这一点吗?我应该指出,做一次句子不是问题。它同时进行多个操作。

2014 年 5 月 15 日 |星期五 |服务器宕机并导致中断 |瑞克不小心把它关掉了。

我添加了 |来划界。但每一个都会被包裹到一定的长度。所有这些都是在同一时间互相尊重的。

答案1

您可能正在谈论fold.

$ echo abcdefghijklmnop | fold -w 4
abcd
efgh
ijkl
mnop

来自man fold(仅显示最相关的选项,还有更多选项):

DESCRIPTION
   Wrap  input  lines in each FILE (standard input by default), writing to
   standard output.
   -s, --spaces
          break at spaces

   -w, --width=WIDTH
          use WIDTH columns instead of 80

答案2

一个名为的简单文本格式化程序FMMT大多数发行版都带有。回到过去,在 Vimgq命令之前,您可以在with:fmt内部运行文本。vi%!fmt

好像有一个替代品叫标杆但我没有这方面的经验。

fmt似乎是 GNU coreutils 的一部分。

答案3

你的意思是这样的吗?

$ cat temp
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ INPUTS=""
$ FOLDWIDTH=5
$ FILENAME=temp
$ cat $FILENAME
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ for i in $(seq 1 $(awk 'END{print NR}' $FILENAME))
> do
> INPUTS="$INPUTS <(awk 'NR==$i' $FILENAME | fold -w $FOLDWIDTH)"
> done
$ bash -c "paste $INPUTS"
This    This    Final
is So   is Al    Call
me Lo   so So   : Som
ng Te   me Lo   e Tex
xt to   ng Te   t to
 Test   xt to   Compl
         Test   ete T
                his

不过,这有点 hack-y,尤其是使用 来bash -c启动子进程来解释最终的命令行。我试图想出其他方法来逐行解析文件并将每个文件作为文件描述符输入,paste但无法得到一个好的解决方案,因此诉诸于此。另外,我的建议是使用 bash 进程替换,以防使用bash -c不够明显。

答案4

你也可以这样做sed

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\1\n/g'
abcd
efgh
ijkl
mnop

要删除最后一个空白行,

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\1\n/g' | sed '/^$/d'
abcd
efgh
ijkl
mnop

相关内容