我要转换
Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He...
到
Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He
llo.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hell
o.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.
Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He
...,
宽度为 80 个字符。
我首先想到我可以使用sed
。 (让我用 5
个字符而不是 80
个字符来解释清楚。)
echo "longlonglonglonglonglonglonglonglonglonglonglong" | sed 's/\(.\{5\}\)/\1\'$'\n/g'
给予
longl
onglo
nglon
glong
longl
onglo
nglon
glong
longl
ong
如我所愿。但是,当输入字符串永远持续时,我无法使用这种方式。
while true; do; echo -n "Hello."; done | sed 's/\(.\{5\}\)/\1\'$'\n/g'
上面的命令不起作用。我也尝试过使用 perl
,但没有成功。 (perl -pe 's/(.{5})/$1\n/g'
)
所以我放弃了在 unix 命令中解决问题,而是用 C 编写了一个小程序。
#include <stdio.h>
int main(int argc, char *argv[]) {
int i = 0, ch;
while ((ch = fgetc(stdin)) != EOF) {
putchar((char)ch);
i += 1;
if (ch == '\n') {
i = 0;
}
if (i >= 80) {
printf("\n");
i = 0;
}
}
return 0;
}
该程序对我来说效果很好。所以问题是,如何使用 unix 命令将 long long(可能无限)输入字符串拆分成行?
最佳答案
fold
可以成为你的 friend :
$ fold -w 80 file
Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He
llo.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hell
o.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.
Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.Hello.He
...
$ fold -w 20 file
Hello.Hello.Hello.He
llo.Hello.Hello.Hell
o.Hello.Hello.Hello.
Hello.Hello.Hello.He
llo.Hello.Hello.Hell
o.Hello.Hello.Hello.
Hello.Hello.Hello.He
llo.Hello.Hello.Hell
o.Hello.Hello.Hello.
Hello.Hello.Hello.He
llo.Hello.Hello.Hell
o.Hello.Hello.Hello.
Hello.Hello.Hello.He
llo.Hello.Hello.Hell
o.Hello.Hello.Hello.
Hello.Hello.Hello.He
...
来自 man fold
:
fold - wrap each input line to fit in specified width
-w, --width=WIDTH
use WIDTH columns instead of 80
所以实际上 fold file
和 fold -w 80 file
是一样的
关于perl - 如何使用 unix 命令将字符串拆分为具有特定宽度的行?当输入字符串是无限的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604673/