【发布时间】:2013-10-25 10:26:52
【问题描述】:
(找不到更好的标题)
我正在尝试转换一些行,如下所示:
#define GENERIC_TYPE_METER_PULSE 0x30 /*Pulse Meter*/
#define SPECIFIC_TYPE_NOT_USED 0x00 /*Specific Device Class not used*/
......
#define MFG_ID_WAYNE_DALTON 0x0008 //Wayne Dalton
#define MFG_ID_WILSHINE_HOLDING_CO_LTD 0x012D //Wilshine Holding Co., Ltd
#define MFG_ID_WIDOM 0x0149 //wiDom
......
#define COMMAND_CLASS_ALARM 0x71
#define COMMAND_CLASS_ALARM_V2 0x71
#define COMMAND_CLASS_NOTIFICATION_V3 0x71
#define COMMAND_CLASS_NOTIFICATION_V4 0x71
在文件 (c++) 中转成类似这样的内容(对于 Java):
SPECIFIC_TYPE_NOT_USED((byte)0x00) /*Specific Device Class not used*/
MFG_ID_WILSHINE_HOLDING_CO_LTD((byte)0x012D) //Wilshine Holding Co., Ltd
COMMAND_CLASS_ALARM((byte)0x71)
....
我想出了这个:
gawk '/^#define/ && / [[:xdigit:]]/ { printf "%s((byte)%s)\n",$2,$3 }'
但有两个问题 - 它不适用于 awk;需要 GNU-awk (gawk),而且我还需要输出中的行尾 cmets(只要可用)。我怎样才能做到这一点?我对使用awk 特别感兴趣,但也可以使用sed。干杯!!
【问题讨论】:
-
哪个部分需要gawk?您可以将十六进制数字与普通字符类匹配
0x[0-9a-fA-F]+ -
@Barmar:某些原因
0x[0-9a-fA-F]+对我不起作用。希望我没有遗漏任何东西。因此尝试gawk并获得了更好的结果。干杯!!