Chinaunix

标题: 怎样删除掉名字中间的空格(分割符也是空格) [打印本页]

作者: gy_post    时间: 2005-11-02 16:14
标题: 怎样删除掉名字中间的空格(分割符也是空格)
各位朋友:
          我遇到了一个问题,是这样的:我有一个文本文件需要处理掉名字中间的空格。但是其分割符也是空格,所以一些命令就不能用了!怎样才能删除掉名字中间的空格而保持两列中间作为分割符的空格!文件如下:
01111 张 三 325 458
01112 张三 325 458
01113 张  三 325 458
01114 张三 325 458
01115 张 三 325 458
01117 张三 325 458
01110 张三 325 458
01119 张三 325 458

如上所述,怎样才能删掉第二个域中间的空格呢?
谢谢。
作者: waker    时间: 2005-11-02 16:27
  1. LC_ALL=C sed 's/\([^0-9]\)  *\([^0-9]\)/\1\2/' ur-file
复制代码

作者: gy_post    时间: 2005-11-02 16:50
标题: 斑竹大哥帖子我看过了,不能用啊,是不是环境不对?
详细例子如下:
01111 张 三 325 458 仓西1#
01112 张三 325 458 仓西1#
01113 张  三 325 458 仓西1#
01114 张三 325 458 仓西1#
作者: waker    时间: 2005-11-02 16:58
不行是什么意思
  1. [waker@proxy d1]$ cat >ur-file <<EOF
  2. > 01111 张 三 325 458 仓西1#
  3. > 01112 张三 325 458 仓西1#
  4. > 01113 张  三 325 458 仓西1#
  5. > 01114 张三 325 458 仓西1#
  6. > EOF
  7. [waker@proxy d1]$ LC_ALL=C sed 's/\([^0-9]\)  *\([^0-9]\)/\1\2/' ur-file
  8. 01111 张三 325 458 仓西1#
  9. 01112 张三 325 458 仓西1#
  10. 01113 张三 325 458 仓西1#
  11. 01114 张三 325 458 仓西1#
复制代码

作者: 寂寞烈火    时间: 2005-11-02 17:02

  1. /home/lee#cat a
  2. 01111 张 三 325 458 仓西1#
  3. 01112 张三 325 458 仓西1#
  4. 01113 张  三 325 458 仓西1#
  5. 01114 张三 325 458 仓西1#
  6. /home/lee#sed 's/\(^[0-9]\+ [^0-9]\) *\([^0-9]\+ [0-9 ]\+\)/\1\2/' a
  7. 01111 张三 325 458 仓西1#
  8. 01112 张三 325 458 仓西1#
  9. 01113 张三 325 458 仓西1#
  10. 01114 张三 325 458 仓西1#
复制代码

作者: gy_post    时间: 2005-11-02 21:30
标题: 真是奇怪啊?
那为什么,我在我的环境下总是不能成功啊,我用的是SCO UNIX5。05啊,按两位大哥指点的,试过后,还是没有变化啊!怎么会事啊?
作者: gy_post    时间: 2005-11-02 21:40
标题: 真是奇怪啊?
那为什么,我在我的环境下总是不能成功啊,我用的是SCO UNIX5。05啊,按两位大哥指点的,试过后,还是没有变化啊!怎么会事啊?
作者: zymzxq    时间: 2005-11-02 22:46
标题: 好用
但是有一点不明白, \1\2是代表什么?谢谢
作者: zymzxq    时间: 2005-11-02 22:53
明白了,呵呵,man文档还是很好的
作者: zymzxq    时间: 2005-11-02 22:55
gy_post  星号前的空格是两个  
俺的环境是redhat9 ,没问题
作者: gy_post    时间: 2005-11-03 12:38
标题: 哦,原来是这样啊?;让我再试试!

作者: gy_post    时间: 2005-11-03 12:47
标题: 怎么还是不行啊,好奇怪啊!
怎么还是不行啊,好奇怪啊!
作者: waker    时间: 2005-11-03 12:55
是什么不行,什么现象,输入了什么,输出了什么?
来点伟哥试试?
作者: gy_post    时间: 2005-11-03 13:00
标题: 呵呵,伟哥没有用啊!是这样的!
我把需要转换的文件为111
#cat 111
01111 张 三 325 458 仓西1#
01112 张三 325 458 仓西1#
01113 张  三 325 458 仓西1#
01114 张三 325 458 仓西1#


将大哥给我的命令复制进了一个cx.sh
#cat cx.sh
sed 's/\(^[0-9]\+ [^0-9]\) *\([^0-9]\+ [0-9 ]\+\)/\1\2/'  $1 >555
然后运行
#sh cx.sh 111
查看输出结果
#cat 555
01111 张 三 325 458 仓西1#
01112 张三 325 458 仓西1#
01113 张  三 325 458 仓西1#
01114 张三 325 458 仓西1#
原封不动的又放在了这里没有变化!
我用的是sco unix 5.05
作者: waker    时间: 2005-11-03 13:08
LC_ALL=C sed 's/\([^0-9]\)  *\([^0-9]\)/\1\2/' 111


如果你要用烈火的,首先确认你的sed支持 \+

装一套gnu的工具吧?$CO真是不敢恭维
作者: gy_post    时间: 2005-11-03 13:13
标题: gnu的工具?
gnu的工具那里可以找到啊,?
那是干吗的啊?
作者: gy_post    时间: 2005-11-03 13:19
标题: gnu的工具?
gnu的工具那里可以找到啊,?
那是干吗的啊?
作者: waker    时间: 2005-11-03 13:20
gnu.org
作者: 寂寞烈火    时间: 2005-11-03 13:39
原帖由 gy_post 于 2005-11-3 13:13 发表
gnu的工具那里可以找到啊,?
那是干吗的啊?

先了解一下什么是GNU吧~
http://www.gnu.org/home.cn.html
作者: very_99    时间: 2005-11-03 16:50
没事  想通了

[ 本帖最后由 very_99 于 2005-11-3 17:02 编辑 ]
作者: hp_unix    时间: 2005-11-06 00:26
原帖由 waker 于 2005-11-2 16:27 发表
  1. LC_ALL=C sed 's/\([^0-9]\) [color=Red] *[/color]\([^0-9]\)/\1\2/' ur-file
复制代码


能不能解释一下啊~  "*"前面的空格什么意思?




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