У меня есть заголовочный файл с большим количеством #define
макросы в виде AAA_xxxxx
, где AAA
всегда набор три-кодов и xxxxx
всегда числовое значение. Мне нужно изменить файл, чтобы #define AAA_xxxxx
помещается обратно в файл как #define AAA_xxxxx xxxxx
,
Лучший пример, который я могу привести, — Oracle ORA-xxx (коды ошибок). Например, если у меня есть строка, как …
#define ORA_00001 // "unique constraint violated"
Мне нужен скрипт, который заменит строку так, чтобы она выглядела так …
#define ORA_00001 00001 // "unique constraint violated"
… без изменения остальной части файла или самой строки.
я верю awk
мой ответ, но я не могу правильно понять синтаксис …
awk '{ if ( $1 == "#define" ) parse_and_print_the_line($0) ; else print $0 }'
Любые идеи (awk или нет) будет принята с благодарностью.
Вот простой Perl-скрипт:
perl -i -pe 's{^(#define(\s+)[A-Z]{3}_(\d+))(?=\s*\/\/|\s*$)}{$1$2$3}' file_to_modify.h
Он находит любую строку, которая соответствует одному из следующих шаблонов:
#define XYZ_1234234456
#define XYZ_1234234456 // comment
и изменяет его на соответствующий один из следующих шаблонов:
#define XYZ_1234234456 1234234456
#define XYZ_1234234456 1234234456 // comment
Других решений пока нет …