Chinaunix

标题: 问个列如何变行的问题 [打印本页]

作者: youcz    时间: 2009-11-11 07:42
标题: 问个列如何变行的问题
cat test
key{
    line1
}

key{
    line2
    line3
    line33
    line44
}

key{
    line4
    line5
    line6
}

如何才能变成 key{line 4,line 5,line 6}...这样的形式
作者: ywlscpl    时间: 2009-11-11 07:57
只针对贴出的文本

awk -v RS='key{\n|}\n' -v OFS="," 'NF{$1=$1;print "key{"$0"}"}' file
作者: youcz    时间: 2009-11-11 08:02
标题: 回复 #2 ywlscpl 的帖子
高,实在是高,
作者: youcz    时间: 2009-11-11 08:10
标题: 回复 #2 ywlscpl 的帖子
再问下,
awk -v RS='key{\n|}\n' -v OFS="," 'NF{$1=$1;print "key{"$0"}"}' file | egrep line33
key{line2,line3,line33,line44}

怎么写才能转到一开始的形式,谢谢
作者: wtuter    时间: 2009-11-11 08:42
标题: 回复 #1 youcz 的帖子
[2]cat 1
key{
    line1
}

key{
    line2
    line3
    line33
    line44
}

key{
    line4
    line5
    line6
}
[2]
[2]
[2]
[2]awk -v RS='key' '{gsub(/\n +/,",");printf "%s%s",t,$0}{t=RS}' 1
key{,line1
}

key{,line2,line3,line33,line44
}

key{,line4,line5,line6
}
作者: cxfcxf    时间: 2009-11-11 08:47
development:~# echo "key{line2,line3,line33,line44}"|awk -F[{},] '{printf $1"{\n\t";for(i=2;i<=NF-2;i++)printf $i"\n\t";printf $(NF-1)"\n";printf "}\n"}'
key{
        line2
        line3
        line33
        line44
}
作者: blackold    时间: 2009-11-11 08:58
标题: 回复 #4 youcz 的帖子
sed 's/{/&\n/;s/}/\n&/;s/,/\n/g'
作者: ywlscpl    时间: 2009-11-11 09:00
标题: 回复 #4 youcz 的帖子
echo "key{line2,line3,line33,line44}" | awk -v RS='key{|,|}' 'BEGIN{print "key{"}1;END{print "}"}'

[ 本帖最后由 ywlscpl 于 2009-11-11 09:01 编辑 ]
作者: blackold    时间: 2009-11-11 09:15
想起一个小故事。德国生产了一种机器,把生猪从左边推进机器,右边就输出火腿了, 相反,把火腿从右边放进去,左边就会出来一个活猪。
  1. echo 'key{line2,line3,line33,line44}'|sed 's/[{]/&\n/;s/}/\n&/;s/,/\n/g'
  2. key{
  3. line2
  4. line3
  5. line33
  6. line44
  7. }
复制代码


  1. $ echo 'key{line2,line3,line33,line44}'|sed 's/[{]/&\n/;s/}/\n&/;s/,/\n/g'|sed ':n;/key{/N;/}/!bn;s/\n//;s/\n/,/g;s/,}/}/'
  2. key{line2,line3,line33,line44}
复制代码

[ 本帖最后由 blackold 于 2009-11-11 09:47 编辑 ]




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