Chinaunix

标题: 将“123456789” 变成 “123-456-789” [打印本页]

作者: yazi0127    时间: 2010-06-11 10:23
标题: 将“123456789” 变成 “123-456-789”
如题
作者: expert1    时间: 2010-06-11 10:26
echo 123456789|sed 's/\(...\)\(...\)\(...\)/\1-\2-\3/'
作者: expert1    时间: 2010-06-11 10:28
再2分走人
作者: yazi0127    时间: 2010-06-11 10:32
有没有general一些的?
000000000000000000000000 变成0000000-00000000-00000000呢?注意“-”之间的数字个数是相同的
作者: blackold    时间: 2010-06-11 10:34
回复 1# yazi0127


    有过了,麻烦你自己搜一下吧。
作者: iori809    时间: 2010-06-11 10:39
[root@commserver: /tmp]#echo "000000000000000000000000" | awk -F "" '{for(i=1;i<=NF;i++){if(i%5==0){printf "-"}else{printf $i}}}
作者: yazi0127    时间: 2010-06-11 10:39
回复 5# blackold

按照你的意思,几乎每个人都可以这样回帖
作者: iori809    时间: 2010-06-11 10:40
回复 7# yazi0127


    [root@commserver: /tmp]#echo "000000000000000000000000" | awk -F "" '{for(i=1;i<=NF;i++){if(i%5==0){printf "-"}else{printf $i}}}


试试这个~黑哥不是你想的那意思呵呵
作者: yazi0127    时间: 2010-06-11 10:41
回复 7# iori809
  1. i%5==0
复制代码
这个办法不错
作者: blackold    时间: 2010-06-11 10:50
回复 7# yazi0127


    呵呵,我是说前不久有过这种贴子,并没有对你有什么恶意。
作者: lock0n    时间: 2010-06-11 11:20
回复 10# blackold

对待MM要温柔
作者: 渣渣鸟    时间: 2010-06-11 11:46
echo "123456789" | sed ':a; s/\B[0-9]\{3\}\>/-&/;ta'
作者: ywlscpl    时间: 2010-06-11 11:54
我是没看懂题意。

以顶楼例子来说:将“123456789” 变成 “123-456-789”
那么1234567890是变成123-456-789-0,还是1-234-567-890  ?

后来楼主又在4楼补充
有没有general一些的?
000000000000000000000000 变成0000000-00000000-00000000呢?注意“-”之间的数字个数是相同的

不过我数了下0的个数,从左往右分别是7、8、8

根据俺的分析,楼主的意图似乎是:给定一个字符串,此字符串长度为3的倍数,三等分后每等分之间加-分隔

所以我猜测的答案是:
  1. awk -F '' -v OFS='' 'length($0)%3{print "error input";exit}{n=NF/3;for (i=1;i<n;i++) $(i*3)=$(i*3)"-"}2'
复制代码

作者: yazi0127    时间: 2010-06-11 12:09
回复 12# 渣渣鸟


    正解,谢
作者: yazi0127    时间: 2010-06-11 12:13
不过我数了下0的个数,从左往右分别是7、8、8

那是我少写了一个“0”
楼主的意图似乎是:给定一个字符串,此字符串长度为3的倍数,三等分后每等分之间加-分隔

我的意思是把字符串等分,每等分之间用“-”隔开。

另,这是一个练习,最近在学习正则
作者: 渣渣鸟    时间: 2010-06-11 12:34
> echo "12345678900" | sed ':a; s/\B[0-9]\{3\}\>/-&/;ta'
12-345-678-900

> echo "12345678900" | sed ':a; s/\<[0-9]\{3\}\B/&-/;ta'
123-456-789-00
作者: aluoyeshi    时间: 2010-06-11 13:41
echo "123456789" |sed -e 's/.../&-/g' -e 's/-$//'
作者: keymanlu    时间: 2010-06-11 15:04
我也翻了下笔记,虽然不知道什么意思,但抄下来了
echo b19385739513904.89abc|perl -pe 's/(\d)(?=(?:\d\d\d)+(?!\d))/$1,/g;'
作者: blackold    时间: 2010-06-11 15:10
回复 18# keymanlu


   
作者: Shell_HAT    时间: 2010-06-11 19:37
回复 15# yazi0127


把字符串几等分?三?四?五?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2