藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教:一個關於文本編輯的shell?

0|安強|3009431512|0517|3952763|2003/11/14|0.01|0.75|65.74|65.74|65.00|20030921|2
0031020|1|01209|600127|基本月租費|15.00|區內電話費|14.20|區間電話費|2.50|長途電?
胺褆16.94|IP電話費|17.10|
如何將上述一條記錄中「基本月租費」前的"|"改為","

試試

試試
[code]
sed 's/|基本月租費/\,基本月租費/g '
[/code]

sed 's/|\(基本月租費\)/,\1/g'  datafile

不好意思,我是想把基本月租費之前的所有"|"用","置換
請問如何實現

sed ':a;s/|\(.*基本\)/,\1/;ta'  ur-file

請讀...

-->
try:
[code]awk -F "基本月租費" 'NF==2{gsub(/\|/, ",", $1);print $1 FS $2}'[/code]

-->
暈,JB月租費都能當FS用,虧你想的出[img]http://www.lslnet.com/linux/#images/smilies/icon_mrgreen.gif[/img]

[code]awk -F "基本月租費" 'NF==2{gsub(/\|/, ",", $1);print $1 FS $2}'[/code]

四川話:腦殼夠難。:shock:

呵呵,不想做循環而已。^_^
用字符串做FS有什麼問題?正則做FS也行啊。

-->
[color=red]g[/color]sub
通常這個字符就暗示著循環[img]http://www.lslnet.com/linux/#images/smilies/icon_mrgreen.gif[/img]

-->
歡迎抬槓!^_^
sed/awk依次讀入每一行就更加是循環。

電腦本身就是死循環,所以俺從來不考慮是不是一定要用循環或不用,反正已經在用了

你不考慮我不反對,反正我是考慮的。^_^

呵呵,有創意.
但是我的終端不知道如何輸入中文.

謝謝寂寞烈火
不過我的行數怎麼會執行後變少了呢???:em14:

不清楚你數據的具體情況,「基本月租費」可能不出現的話需要改一下:
[code]awk -F "基本月租費" 'NF==2{gsub(/\|/, ",", $1);print $1 FS $2}NF<2'[/code]

bye the way, I am WOODIE. ^_^

再來一個perl的:
[code]perl -pe 's/\|(?=.*基本月租費)/,/g'[/code]

請問那最後加的NF<2是判斷什麼內的呢?
兩次結果確實不同
還有前面的/\|/是轉義嗎?

謝謝woodie

-->
以字符串「基本月租費」作為awk的字段分隔符,何時字段數NF會小於2?當然是字段分隔符沒出現,整個行只有一個字段的情況。
\|為何要轉移呢?因為|在正則表達式中有特殊的含義,這裡我們要用的是|字符本來的含義,所以轉義。
那為何在sed中不用轉義呢?因為不同的程序對一些特殊字符的處理不同。正則表達式在不同的程序有不同的實現,你可以參考飛灰橙的一篇精華帖子:正則的迷霧。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com