我有一个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实用程序,认为这会有所帮助。
感谢。
答案 0 :(得分:1)
你真的想要负面的背后隐藏,sed
不支持。使用更强大的工具,如python,如:
cat prog.cpp | python -c 'import re,sys;for line in sys.stdin: print re.sub(r\''\'(?<!MACRO\()"([^"]*)\''\',"MACRO(\"\g<1>\"))'