使用格式化结果解析搜索/替换头文件

时间:2012-09-21 20:00:04

标签: c++ c shell awk

我有一个包含#defineAAA_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与否)都将不胜感激。

1 个答案:

答案 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