linux字符串替换问题,有点难度

bt21cn 发布于 2015/07/07 18:49
阅读 283
收藏 0

我有一个字符串类似:

(1,1,{1,1},{1,1,{2,2},cco1{2,2},cbax[{2,2},{2,2}]},{ccp1[{2,2},{2,2}]})

这里面有大括号嵌套大括号, 我想做到的是将第二层大括号内的逗号,全部替换成 | 符号.

替换后效果如下:

(1,1,{1,1},{1,1,{2|2},cco1{2|2}|cbax[{2|2}|{2|2}]},{ccp1[{2|2}|{2|2}]})

这个shell应当如何写呢,我研究了好久, 求大神现身

说明一下,本例子中的1,2 数字只是为了方便查看我举的特例,实际可情况是可以为其它任何字母或数字




加载中
0
当朝宰相
当朝宰相
sed 's/{2\,2\}/\{2\|2\}/g'
b
bt21cn
2这个值只是我举的例子,为了方便查看, 实际情况是不同的值
0
0
公孙二狗
公孙二狗
不知道 shell 里用栈的结构复杂不复杂,这个问题用栈很好解决。
b
bt21cn
能说说思路吗
0
jQer
jQer
i = 0
M = 0
len = length string

for (;;)
    if i >= len 
        break

    c = string[i++]

    if c == ,
        if M == 2
            c = | 
    if c == {
        M++
    if c == }
        if M > 0
            M--




inuxor
inuxor
回复 @bt21cn : 维护一个计数器始终令'{'的数量与层数一致;若有两个,碰见','就替换
b
bt21cn
兄台没太看明白, 能说说思路吗
返回顶部
顶部