使用sed命令包装字符串

时间:2014-09-20 17:50:33

标签: c++ windows string visual-studio sed

我有一个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实用程序,认为这会有所帮助。

感谢。

1 个答案:

答案 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>\"))'