中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 06:18
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已解决]如何用sed实现这样的排版(把一行分成多行)?
可打印版本  1,350 / 8
第1楼 740011611 发表于 2010-12-01 15:07
初级用户 发帖 83 积分 96 来自 信阳
[已解决]如何用sed实现这样的排版(把一行分成多行)?
想用sed实现把一个很长的行换成多个这样的行:每行都是9个汉字(最后一行可不是9个汉字)就是说,每段中每9个汉字换行一次.
例如:
输入:

不坚持,痛苦会一直留下来;坚持下去,过程可能会辛苦一点。

把上面一行文字分割成如下3小行,不知sed能否实现?
输出:

不坚持,痛苦会一直 ----->9个字符
留下来;坚持下去, ------>9个字符
过程可能会辛苦一点。 ------->10个字符

[ Last edited by 740011611 on 2010-12-5 at 18:23 ]
第2楼 freeants001 发表于 2010-12-01 17:46
中级用户 发帖 244 积分 330 来自 湖北
sed "s/\(*.\)\{9\}/\0\r\n/g" srcfile.txt

处理结果如下:

不坚持,痛苦会一直
留下来;坚持下去,
过程可能会辛苦一点


每行9个中文字符,包括中文标点。
第3楼 freeants001 发表于 2010-12-01 17:50
中级用户 发帖 244 积分 330 来自 湖北
JS脚本,每行九个汉字,不含中文标点。



处理结果:

不坚持,痛苦会一直留
下来;坚持下去,过程可
能会辛苦一点。
第4楼 740011611 发表于 2010-12-01 17:52
初级用户 发帖 83 积分 96 来自 信阳
多谢楼上的代码。能稍微解释一下这段代码吗?刚学sed,很多还看不懂。
上网查了\x7F-\xFF代表汉字,但是后面的/\0\r\n/是什么意思呢?难道是换行了?

[ Last edited by 740011611 on 2010-12-1 at 18:21 ]
第5楼 freeants001 发表于 2010-12-01 18:28
中级用户 发帖 244 积分 330 来自 湖北
sed "s/\(*.\)\{9\}/\0\r\n/g" srcfile.txt


1、蓝色部分匹配中文字符第一字节,由于一个中文字符占2字节,所以后面补一个.。.

2、红色部分匹配非中文字符,后面的*表次这个字符可以出现任意多次。

3、1,2组合就形成一个结构,这个结构出现9次就在后面加换行符。\(*.\)\{9\}

4、sed从左到右依次处理,就得到最后的结果
第6楼 740011611 发表于 2010-12-01 19:33
初级用户 发帖 83 积分 96 来自 信阳
谢谢。那么\0是什么意思啊?
还有就是把题目换成每九个字符(包括英文和数字)换行而不一定是每9个汉字换一次行?
第7楼 zaixinxiangnian 发表于 2010-12-01 21:29
初级用户 发帖 106 积分 151 来自 河南省
sed 是一个命令还是脚本
第8楼 Hanyeguxing 发表于 2010-12-01 21:49
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
Originally posted by zaixinxiangnian at 2010-12-1 21:29:
sed 是一个命令还是脚本
第三方扩展命令
第9楼 740011611 发表于 2010-12-05 18:26
初级用户 发帖 83 积分 96 来自 信阳
{len=length($0)
if(len<=9)
print $0
else
{for(i=1;len>9;i+=9)
{print substr($0,i,9)
len-=9
}
print substr($0,i)
}
}
#split the long line
以上保存为splitlongline.awk
gawk -f splitlongline.awk srcfile.txt

//如果含有英文单词,可能会被截断。
以上想法只是想对文字进行重新排版,然后用sed -i "a\---------" *.txt
给文字加上分割线,放在手机上方便阅读(因为我的手机每行最大容纳9个汉字)

[ Last edited by 740011611 on 2010-12-5 at 18:29 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023