sed中如何替换出新行来
2004-04-23 15:18 pm
现载:Www.8s8s.coM
地址:无名

操作系统 SunOS 5.9 sun4u sparc SUNW,Ultra-250
原文件名test仅一行
hellohellohello

要求结果:
hello
hello
hello

我使用
sed 's/hello/hello^M/g' test #^M为ctrl_V ctrl_M
不能实现,请问有何错误



sed是以行为处理单位的.
随便处理一下吧:
cat tt|sed 's/hello/hello@/g'|tr '@' ' '

版主真是信手捻来皆成贴啊

感谢感谢,回答得太快太好了
看来仅有sed是无法生成新行的,必须tr的帮助

问的是经典问题.

斑竹,要我有一行,为abcdefghijklmnopqrstuvwxy
按照每五个字符就换行怎么做?

用awk处理一下吧.

如果使用VI的话
:%s/...../&^M/g
注意:^M是由ctrl_v ctrl_m产生的

如果使用sed的话
sed 's/(.....)/1@/g' file | tr '@' ' '
如果想每m个字符换行
sed 's/(.{m,m})/1@/g' file | tr '@' ' '
献丑了

bjchenxu 回答的不错.


没有版主的提示,也就没有这个答案,呵呵
再次感谢valentine


再减少几个字吧,呵呵

如果使用sed的话
sed 's/...../&@/g' file | tr '@' ' '
如果想每m个字符换行
sed 's/.{m,m}/&@/g' file | tr '@' ' '

本贴为我想出的本主题的答案:不用tr也能解决问题

原文件名test,仅一行
hellohellohello

要求结果:
hello
hello
hello

答案:
我edit一个脚本文件
sedfile
内容为
s/hello/
&/g

运行命令
sed -f sedfile test即可增加新行

真是vi高手,我虽然不是高手,但是我喜欢vi

bjchenxu 精神可嘉啊.
不过这样更符合要求一些:
sedfile
内容改为
s/hello/&
/g

这样算是彻底的sed答案了.
哈哈,俺也学到新东西了.好象&用起来比()的子表达式形式简单啊.不过,不太好理解.
也谢谢bjchenxu .


[这个贴子最后由valentine在 2002/08/20 09:30am 编辑]

更准确的答案在这里,(看来俺开始回答的草率了些,不过tr的方法也是一种思路)
ksh:
sed 's/hello/&^J/g' test
or
sed 's/hello/hello^J/g' test

^J的输入是ctrl+V ctrl+J
Bourne shell:

sed 's/hello/&
/g' test

后是回车.


怪哉
此方法在solaris 9的csh中不行,但是在bash下却可以

另外,在bash中,可以直接回车,不用ctrl_v + ctrl_j,hehe

Bourne shell也是回车.我忘了写了,现在加上了.
csh俺一直不喜欢.