如何使用unix命令将字符串拆分为具有特定宽度的行?当输入字符串是无限的?

 爱吹泡泡de鱼_436 发布于 2022-12-24 00:58

我想转换

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 
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命令将长的(可能是无限的)输入字符串拆分成行?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有