使用sed命令来包装string

我有一个C ++程序,我想在MACRO中包装大部分string

例如,代码:

#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\")"); } 

请注意,如果该string已经在MACRO中,则不应该双重包装。 另外,如果string是预处理器语句的一部分,则不应该修改它。

我试过使用sed来做到这一点,但是我不太明白。 我是新来的sed,所以可能是我只是做得不对,或者说sed不能做到这一点。

我在Windows上运行,如果有帮助,使用Visual Studio。 我在Windows电脑上安装了一个sed实用程序,认为这会有所帮助。

谢谢。

你真的想要消极lookbehind ,哪个sed不支持。 使用更强大的工具,如Python,如下所示:

 cat prog.cpp | python -c 'import re,sys;for line in sys.stdin: print re.sub(r\''\'(?<!MACRO\()"([^"]*)\''\',"MACRO(\"\g<1>\"))'