操作系統 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俺一直不喜歡.