在n个字符之后添加一个换行符

sh/bash/dash/ksh/zsh等Shell脚本
回复
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

在n个字符之后添加一个换行符

#1

帖子 tusooa » 2010-08-01 22:10

rt.
ps:sed处理中文和英文字符采用相同的策略,即'a'和'甲'都算1个字符。怎么让sed这样:

代码: 全选

sed -re 's@.{4}@&\n@g' <<< '甲乙丙丁abcdefg'
甲乙
丙丁
abcd
efg

代码: 全选

] ls -ld //
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 在n个字符之后添加一个换行符

#2

帖子 trigger » 2010-08-02 14:31

不好弄,utf8汉字是三个字节
LANG=C也不行,{4}把字拆散了

代码: 全选

$ LANG=C sed -re 's@.{4}@&\n@g' <<< '甲乙丙丁abcdefg'
甲�
����
�丁
abcd
efg
{6}不散,英文又不对了

代码: 全选

$ LANG=C sed -re 's@.{6}@&\n@g' <<< '甲乙丙丁abcdefg'
甲乙
丙丁
abcdef
g
等ee来
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 在n个字符之后添加一个换行符

#3

帖子 xiooli » 2010-08-02 14:43

先把英文散了,再散汉字。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 在n个字符之后添加一个换行符

#4

帖子 eexpress » 2010-08-02 16:25

utf8汉字是三个字节
3-6哦。
除开你使用脚本处理,汉字一个算一个。如果按照字节处理,那碰死都不行的。
● 鸣学
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 在n个字符之后添加一个换行符

#5

帖子 trigger » 2010-08-02 16:58

eexpress 写了:
utf8汉字是三个字节
3-6哦。
除开你使用脚本处理,汉字一个算一个。如果按照字节处理,那碰死都不行的。
怎么办呢?ee想个法子
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

Re: 在n个字符之后添加一个换行符

#6

帖子 link_01 » 2010-08-02 18:01

代码: 全选

echo '甲乙丙丁abcdefg'|sed  -r 's/[^a-zA-Z0-9]{2}/&\n/g'  |sed -r 's/[a-zA-Z0-9]{4}/&\n/g'

代码: 全选

echo '甲乙丙丁abcdefg'|sed  -r 's/[^a-zA-Z0-9]{2}/&\n/g'  |sed -r 's/\w{4}/&\n/g'
不懂,瞎琢磨。
笔记
-------------------------------------
http://blog.163.com/wqt_1101
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 在n个字符之后添加一个换行符

#7

帖子 tusooa » 2010-08-02 18:57

代码: 全选

$ sed -re 's/[a-zA-Z_\-\:\d]{4}/&\n/g' -e 's/[^a-zA-Z_\-\:\d]{2}/&\n/g' <<< '甲乙丙丁abcdefg'
甲乙
丙丁
abcd
efg

代码: 全选

] ls -ld //
TheRedIsEast
帖子: 8
注册时间: 2010-06-30 20:51

Re: 在n个字符之后添加一个换行符

#8

帖子 TheRedIsEast » 2010-08-02 22:04

代码: 全选

awk -v FIELDWIDTHS="2 2 4 3" '{print $1,$2,$3,$4}' OFS="\n"
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 在n个字符之后添加一个换行符

#9

帖子 tusooa » 2010-08-03 23:56

ls,

代码: 全选

>> awk -v FIELDWIDTHS="2 2 4 3" '{print $1,$2,$3,$4}' OFS="\n" <<< '嘿嘿,小样,没用了吧'
�
 ��
   ���
      ��
        % 

代码: 全选

] ls -ld //
allanxia86
帖子: 6
注册时间: 2010-07-28 21:55

Re: 在n个字符之后添加一个换行符

#10

帖子 allanxia86 » 2010-08-05 23:58

最近刚开始学习sed,请问下各位大侠:

代码: 全选

sed -re 's@.{4}@&\n@g' <<< '甲乙丙丁abcdefg'
这个s参数的用法怎么和

代码: 全选

s/pattern/replacement/[flag]
不同啊,'@'什么意思啊?哪里有文档可以看看?

代码: 全选

[a-zA-Z_\-\:\d]
这个里面的

代码: 全选

_\-\:\d
什么意思啊?请各位大侠不吝赐教
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: 在n个字符之后添加一个换行符

#11

帖子 BigSnake.NET » 2010-08-06 0:17

你是想怎么样, 中文究竟当几个字符处理?
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复