sed, сопоставляющий группу и изменяющий группу перед повторным использованием - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть некоторый код на C, который по сути является оператором switch, где существует МНОГИЕ случаи, и большинство из них проваливаются:

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

У меня есть строка sed 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', которая захватывает функцию и размещает ее в правильном месте. case firstCase: case secondCase: если (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 голосов
/ 15 ноября 2018

Ваш вопрос немного неясен, но вы можете рассмотреть возможность использования вместо :

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;

Вы можете адаптировать вышеупомянутое для удовлетворения ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...