2012-09-21 71 views
0

我有一個頭文件,其格式爲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與否)將不勝感激。

+1

恭喜,第70,000個問題在C上SO :) –

回答

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 
+0

這是非常好的......謝謝。它像一個冠軍! – nvanwyen

+0

@nvanwyen:不客氣! – ruakh