![]() |
中国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:第三方扩展命令 |
|
| 第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 |