sed匹配组并在重用之前修改组

时间:2018-11-13 17:40:30

标签: c sed

我有一些C代码,它本质上是一个switch语句,其中存在许多情况,大多数情况都存在:

case firstCase:
case secondCase:
actionFunction(dir,angle,speed);
break;
case thirdcase:
actionFunction(dir,angle,speed);
break;

我已完成sed 's/(action.*)/if (foobar)\n\t\t\t{\n\t\t\t\t\1\n\t\t\t}else\n\t\t\t{\n\n\t\t\t\}/g'行的sed功能,并将其放置在正确的位置     案例优先     案例二     如果(foobar)     {actionFunction(dir,angle,speed);}     其他{

}
break;
if(foobar)
{actionFunction(dir,angle,speed);}
else{

}

我需要将匹配项\\ 1的修改版本放入else子句中。

case firstCase:
case secondCase:
if(foobar)
{actionFunction(dir, angle, speed);}
else{
actionFunction(newDir, angle, speed);
}
...

我该怎么做? 很抱歉这个问题持续了多久,可能还不清楚! 我很乐意回答。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题尚不清楚,但是您可以考虑使用而不是

awk '{print}                    # print line
     /case secondCase:/{        # if the line matches "case secondCase"
        getline                 # retrieve the next line
        print "if (foobar) {"   # print if statement
        print "   "$0           # print if action
        print "} else {         # print else statement
        sub(/dir/,"newdir")     # update action
        print "   "$0           # print else action
        print "}"               # close if-else statement
     }'

这将输出:

case firstCase:
case secondCase:
if (foobar) {
   actionFunction(dir,angle,speed);
} else {
   actionFunction(newdir,angle,speed);
}
break;
case thirdcase:
actionFunction(dir,angle,speed);
break;

您可以调整以上内容以适应您的需求。