У меня есть программа 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, если это поможет. Я установил утилиту sed на свой компьютер с Windows, думая, что это будет полезно.
Благодарю.
Вы действительно хотите негативный взгляд сзади, который sed
не поддерживает Используйте более мощный инструмент, такой как python, что-то вроде:
cat prog.cpp | python -c 'import re,sys;for line in sys.stdin: print re.sub(r\''\'(?<!MACRO\()"([^"]*)\''\',"MACRO(\"\g<1>\"))'