Используйте команду 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, если это поможет. Я установил утилиту sed на свой компьютер с Windows, думая, что это будет полезно.

Благодарю.

1

Решение

Вы действительно хотите негативный взгляд сзади, который sed не поддерживает Используйте более мощный инструмент, такой как python, что-то вроде:

cat prog.cpp | python -c 'import re,sys;for line in sys.stdin: print re.sub(r\''\'(?<!MACRO\()"([^"]*)\''\',"MACRO(\"\g<1>\"))'
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector