操作系统 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 ttsed '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俺一直不喜欢.
(出处:http://www.sheup.com)