我有一个源代码,我想用新的格式和文本替换一些特定的行。
文件中包含以下几行:
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
文本,并且从到 逗号的文本将用大括号添加。我该怎么做?和,?,
(
,
if
sed
awk
答案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);
}