Я пытаюсь выяснить, есть ли способ использовать SED или AWK для замены слова при определенных вложенных условиях. Пример кода:
void className::functName1_testName1_paramA()
{
some_code;
/* comment */
returnType_1 paramA = value1;
returnType_2 paramB = value2;
returnType_3 paramC = value3;
}
void className::functName1_testName2_paramB()
{
some_code;
/* comment */
returnType_1 paramA = value1;
returnType_2 paramB = value2;
returnType_3 paramC = value3;
}
void className::functName2_testName1_paramA()
{
some_code;
/* comment */
returnType_1 paramA = value1;
returnType_2 paramB = value2;
returnType_3 paramC = value3;
returnType_4 paramD = value4;
}
Я пытаюсь достичь
IF (functName1 && testName1 && paramA are found/matched) THEN
IF (returnType_1 && paramA are found/matched in nth line below above match) THEN
replace value1 with actualValue1;
IF (functName1 && testName2 && paramB are found/matched) THEN
IF (returnType_2 && paramB are found/matched in nth line below above match) THEN
replace value2 with actualValue2;
IF (functName2 && testName1 && paramA are found/matched) THEN
IF (returnType_1 && paramA are found/matched in nth line below above match) THEN
replace value1 with actualValue1;
и т. Д. И т. П.
У меня есть шаблоны с несколькими комбинациямиразные functNames, testNames, params и returnTypes, так что я хотел бы иметь возможность сопоставить его, как указано выше.
Я думал об использовании
sed '/functName1/ { n; n; n; s/value1/actualValue1/; }' fileName
Но это нене работает, потому что есть так много разных случаев, и n-ые строки различаются для разных функций. Поэтому, когда я искал ответы, казалось, что люди говорили, что awk
будет лучше, чем sed
для подобных вещей, но я не мог найти то, что хотя бы отдаленно похоже на мой случай.
Я предполагаю, что есть способ сделать это, но я не уверен. Так что я думаю, вопрос в том, возможно ли что-то подобное с awk
или sed
?
Я не против написать команду awk
/ sed
несколько раз, так что если кто-то может датья пример и синтаксис использования этой команды awk
/ sed
, я мог бы просто применить концепцию и написать остальное.
Я действительно ценю ваше время и заранее благодарю вас.
Ожидаемый результат будет примерно таким:
void className::functName1_testName1_paramA()
{
some_code;
/* comment */
returnType_1 paramA = actualValue1; //after being replaced
returnType_2 paramB = value2;
returnType_3 paramC = value3;
}
void className::functName1_testName2_paramB()
{
some_code;
/* comment */
returnType_1 paramA = value1;
returnType_2 paramB = actualValue2; //after being replaced
returnType_3 paramC = value3;
}
void className::functName2_testName1_paramA()
{
some_code;
/* comment */
returnType_1 paramA = actualValue1; //after being replaced
returnType_2 paramB = value2;
returnType_3 paramC = value3;
returnType_4 paramD = value4;
}