我有一个C++程序,我想把大多数字符串包装在MACRO中。
例如,代码:
#include "header.h"
const char* str;
if (func("Hello, world", "Goodbye", "world") &&
func(MACRO("Hello, world"), "Hello"))
{
str = "MACRO("didIt")";
}
应该变成:
#include "header.h"
const char* str;
if (func(MACRO("Hello, world"), MACRO("Goodbye"), MACRO("world")) &&
func(MACRO("Hello, world"), MACRO("Hello")))
{
str = MACRO("MACRO("didIt")");
}
请注意,如果字符串已经在MACRO中,则不应该对其进行双换行。此外,如果字符串是预处理器语句的一部分,则不应对其进行修改。
我试过用sed来做这件事,但我做不好。我是sed的新手,所以可能是我做得不对,或者sed做不到。
我在Windows上运行,如果有帮助的话,我会使用Visual studio。我在我的Windows电脑上安装了一个sed实用程序,认为这会很有帮助。
谢谢。
您确实想要负后备,而sed
不支持。使用更强大的工具,比如python,比如:
cat prog.cpp | python -c 'import re,sys;for line in sys.stdin: print re.sub(r'''(?<!MACRO()"([^"]*)''',"MACRO("g<1>"))'