我正在寻找一种方法来获取句子并包装它们。使用类似的东西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
答案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