我想转换
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中编写了一个小程序.
#includeint 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命令将长的(可能是无限的)输入字符串拆分成行?