使用sed命令包装字符串

Use sed command to wrap strings

本文关键字:字符串 包装 命令 sed 使用      更新时间:2023-10-16

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