LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1332|回复: 3

请教:shell脚本中如何实现折行的功能

[复制链接]
发表于 2009-10-26 04:56:57 | 显示全部楼层 |阅读模式
我目前在写一个脚本,想对一个utf-8编码的文本文件实现限制每行的字数功能,比如说每行显示30个字符,多余的字符退到下一行。请问如何在shell中实现这一个排版的功能?谢谢大家指点。
发表于 2009-10-26 06:11:25 | 显示全部楼层
get the first 30 chars:
  1. ${var:0:30}
复制代码
get the remainder:
  1. ${var:30}
复制代码
not familiar with utf-8 coding though.
回复 支持 反对

使用道具 举报

发表于 2009-11-2 09:36:59 | 显示全部楼层
被换行的行尾加了个"\":
  1. #!/bin/bash
  2. #
  3. #
  4. #
  5. sed 's/->/        /g' $*|
  6. awk '
  7. BEGIN{
  8.         N=30
  9.         for(i=1;i<=N;i++)
  10.         blanks=blanks" "
  11. }
  12. {
  13.         if ((n=length($0))<=N)
  14.                 print
  15.         else{
  16.                 for(i=1;n>N;n-=N){
  17.                         printf "%s\\\n",substr($0,i,N)
  18.                         i+=N
  19.                 }
  20.                 printf "%s%s\n",substr(blanks,1,N-n),substr($0,i)
  21.         }
  22. }
  23. '
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-11-4 12:37:44 | 显示全部楼层
Post by wubo;2039933
我目前在写一个脚本,想对一个utf-8编码的文本文件实现限制每行的字数功能,比如说每行显示30个字符,多余的字符退到下一行。请问如何在shell中实现这一个排版的功能?谢谢大家指点。


utf-8是变长的,把编码切断后果不太好。

要实现这个你必须先把 utf-8 转换成定长编码,然后才能够判断到30个字符。

如果用脚本做,你需要能够调用诸如 iconv 之类的东东。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表