У меня есть код 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:
случай второй
если (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);
}
...
Как мне это сделать? Извините за то, как долго и, возможно, неясно, этот вопрос! Я более чем счастлив ответить, что могу.
Заранее спасибо!
I have sed line Какая линия sed? grabs function какая функция? of the match "\1" какой матч? Что ты пробовал? Вы можете прочитать как задать хороший вопрос и / или контрольный список вопросов.
"большинство провалов", и не показано ни одного провала ... 1-й и 2-й случаи помечают здесь оператор такой же ...
sed 's / (Drive. *) / if (RTCMTBDriveDirection == dirForward) \ 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 '
В основном мне нужно заменить однострочные функции, начинающиеся с «Drive», на if / else, где совпадение дословно помещается в раздел if, а измененный вызов функции с первым параметром разницы помещается в предложение else.
Боюсь, вы не очень хорошо объясняете, чего хотите достичь. Разве вы не можете отредактировать свой вопрос, включив в него то, как выглядит ваш код до и после редактирования? (Хотя я не уверен, что sed - то, что ей нужно.)
Это помогает ???
Лучшее представление моего вопроса: как мне продолжить обработку группы и использовать эту обработанную версию группы в замене?





Ваш вопрос немного неясен, но вы можете рассмотреть возможность использования awk вместо sed:
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;
Вы можете адаптировать вышеперечисленное в соответствии со своими потребностями.
Непонятно, что ты хочешь делать. Вы хотите превратить переключатели в блоки if / else if / else? Почему вы во втором примере не используете номенклатуру первого?