我有一个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>\"))'