我有一个 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>\"))'
关于c++ - 使用 sed 命令换行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951667/