我有一个包含#define
个AAA_xxxxx
形式的AAA
宏的头文件,其中xxxxx
始终设置为三个代码,而#define AAA_xxxxx
始终是一个数字值。我需要修改该文件,以便将#define AAA_xxxxx xxxxx
作为#define ORA_00001 // "unique constraint violated"
放回文件中。
我能想出的最好的例子是Oracle ORA-xxx(错误代码)。例如,如果我有一行像......
#define ORA_00001 00001 // "unique constraint violated"
我需要一个替换该行的脚本,使其看起来像......
awk
...无需修改文件的其余部分或行本身。
我相信awk '{ if ( $1 == "#define" ) parse_and_print_the_line($0) ; else print $0 }'
是我的答案,但我似乎无法正确理解语法......
{{1}}
任何想法(awk与否)都将不胜感激。
答案 0 :(得分:2)
这是一个简单的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