如何从行中提取数据并使用提取的数据添加新行?

如何从行中提取数据并使用提取的数据添加新行?

我有一个源代码,我想用新的格式和文本替换一些特定的行。

文件中包含以下几行:

LogIfYouCan(!is_it_ready, "Log Text, some variable: " << variable1 << " variable2: " << variable2);

我想将其替换为

if(!is_it_ready) {
   LogOutput("Log Text, some variable: " << variable1 << " variable2: " << variable2);
}

这意味着,以 开头的行将LogIfYouCan更改为到行尾的LogOutput文本,并且从到 逗号的文本将用大括号添加。我该怎么做?和,?,(,ifsedawk

答案1

使用sed

$ sed -E 's/[^!]*([^,]*),[^"]*(.*)/if(\1) {\n   LogOutput(\2\n}/' input_file
if(!is_it_ready) {
   LogOutput("Log Text, some variable: " << variable1 << " variable2: " << variable2);
}

答案2

-E使用支持启用 ERE 和换行符的sed,\n例如 GNU sed 和 BSD sed:

$ sed -E 's/^LogIfYouCan\(([^,]+), *(.*)/if(\1) {\n   LogOutput(\2\n}/' file
if(!is_it_ready) {
   LogOutput("Log Text, some variable: " << variable1 << " variable2: " << variable2);
}

相关内容