Chinaunix

标题: sed删除括号里的空格 [打印本页]

作者: uarenotalone    时间: 2013-03-18 23:17
标题: sed删除括号里的空格
比如文本是这个样子的:   
sd  f   f   [a    b      c    cddd    eee]
如何把括号里的空格删除掉……


作者: blackold    时间: 2013-03-19 05:55
try:
  1. sed ':n;s/\(\[[^][ ]*\) \+/\1/g;tn' urfile
复制代码

作者: yestreenstars    时间: 2013-03-19 09:24
本帖最后由 yestreenstars 于 2013-03-19 10:16 编辑

@blackold
黑哥是起得早,还是睡得晚啊,凌晨6点就在发帖
作者: blackold    时间: 2013-03-19 09:32
本帖最后由 blackold 于 2013-03-19 10:00 编辑

回复 3# yestreenstars


    睡得晚&&起得早。
作者: Shell_HAT    时间: 2013-03-19 09:55
  1. echo "sd  f   f   [a    b      c    cddd    eee]" | awk -F '[' -vOFS='[' 'gsub(/ /,"",$2)'
复制代码

作者: pix77    时间: 2013-03-19 10:28
回复 5# Shell_HAT

为什么加了{},这个结果就不对了?

echo "sd  f   f   [a    b      c    cddd    eee]" | awk -F '[' -vOFS='[' '{gsub(/ /,"",$2)}'
   
作者: Shell_HAT    时间: 2013-03-19 10:35
回复 6# pix77
  1. echo "sd  f   f   [a    b      c    cddd    eee]" | awk -F '[' -vOFS='[' '{gsub(/ /,"",$2)}1'
复制代码

作者: pix77    时间: 2013-03-19 10:39
回复 7# Shell_HAT
呵呵,为什么会这样?


   
作者: pix77    时间: 2013-03-19 11:11
找到了:
[root@postgresql-1 ~]#  echo "sd  f   f   [a    b      c    cddd    eee]" | awk -F '[' -vOFS='[' --profile=/tmp/a '{gsub(/

/,"",$2)}'
[root@postgresql-1 ~]# cat /tmp/a
        # gawk profile, created Tue Aug 21 19:29:34 2012

        # Rule(s)

        {
                gsub(/ /, "", $2)
        }
[root@postgresql-1 ~]#  echo "sd  f   f   [a    b      c    cddd    eee]" | awk -F '[' -vOFS='[' --profile=/tmp/a 'gsub(/

/,"",$2)'
sd  f   f   [abccdddeee]
[root@postgresql-1 ~]# cat /tmp/a
        # gawk profile, created Tue Aug 21 19:29:45 2012

        # Rule(s)

        gsub(/ /, "", $2)       {
                print $0
        }
[root@postgresql-1 ~]#
作者: yestreenstars    时间: 2013-03-19 11:22
@pix77
原来还有--profile这个参数,学习了~
作者: pix77    时间: 2013-03-19 11:23
可以算是debug了,要么重新编译awk
作者: Shell_HAT    时间: 2013-03-19 12:05
回复 8# pix77


    因为6楼的写法没有default action --- print
作者: uarenotalone    时间: 2013-03-19 12:40
回复 2# blackold


    学习了。
作者: uarenotalone    时间: 2013-03-19 12:42
回复 5# Shell_HAT


    这个有个问题。。如果该行有多个中括号括起来的字符,都要求去空格。按这个方法,只能去掉第一个
作者: Shell_HAT    时间: 2013-03-19 13:00
回复 14# uarenotalone


    请给点数据,以便测试。
作者: pix77    时间: 2013-03-19 13:03
回复 12# Shell_HAT
嗯,默认就是print


   
作者: uarenotalone    时间: 2013-03-19 13:07
回复 15# Shell_HAT


    比如说a b c [a  c d ] dd  d [e e e ]   i i i [ f d dd ff    dd ]……
像这样的一行有数目不定的【】组。我试了下,只有第一组的中括号的空格去掉了。。。
,是不是用awk还有其他的方法呢
作者: pix77    时间: 2013-03-19 13:21
这个不就行的:sed ':n;s/\(\[[^][ ]*\) \+/\1/g;tn' urfile
作者: yestreenstars    时间: 2013-03-19 13:27
  1. awk 'BEGIN{RS="[][]";ORS=""}t=="["{gsub(/ /,"");print "["$0"]";t=RT;next}{t=RT}1'
复制代码





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