本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7592520
建立时间:2006年5月29日




[shell/bash]一个用bash(awk)写的代码产生器
软件技术

lhwork 发表于 2007/1/4 22:04:13

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd作者联系方式:Li XianJing <xianjimli at hotmail dot com>更新时间:2007-1-3 在所有脚本语言中,我对bash情有独钟。原因是它简单易用,即使很久没有用过了,看看帮助马上就可以想起来。另外,它作为shell,自然对其它应用程序有较好的亲和力,特别是与find/grep/sed/awk等小工具组合起来,威力更是非同小可。 今天用bash写了一个代码产生器,类似的手法我至少用过数十次了,其简单但很实用,放在这里供新手参考吧。 需求简述:在http://www.iana.org/assignments/character-sets文档中,描述了各种charset的名称和ID。我需要从charset的名称查询到它的ID,或者从charset的ID查询到它的名称。 文档正文部分的格式类似于: Name: BOCU-1                                                   [Scherer] MIBenum: 1020 Source: http://www.unicode.org/notes/tn6/ Alias: csBOCU-1   Name: UTF-8                                                    [RFC3629] MIBenum: 106 Source: RFC 3629 Alias: None  从容易看出,我们只要把Name后面的内容和MIBenum后面的内容对应起来,生成一张表就行了,然后通过查表来完成ID和名称之间的转换。为了便于引用ID,我们还要定义一组枚举值。 脚本如下: 1 #!/bin/bash 2 grep "Name:\|MIBenum:" character-sets | awk ' 3 4 BEGIN{   5     key="";   6     print "#ifndef MIB_CHARSET_H"   7     print "#define MIB_CHARSET_H"   8     print "#define CHARSET_LIST \\"   9 }   10   11 /Name/{   12     key=$2;   13 }   14   15 /MIBenum/{   16     printf "    CHARSET_DEF(CHARSET_"   17     system("echo -n \"" key "\" |tr \"a-z\" \"A-Z\"|tr \"().:\\-\" \"_\"");   18     print ", \"" key "\", " $2 ")\\";   19 }   20   21 END{   22     print ""   23     print "#undef CHARSET_DEF"   24     print "#define CHARSET_DEF(id, name, value) id=value,"   25     print "enum {CHARSET_LIST};"   26     print "#undef CHARSET_DEF"   27       28     print ""   29     print "int         mib_charset_name_to_id(const char* name);"   30     print "const char* mib_charset_id_to_name(int id);"   31     print ""   32     print "#endif/*MIB_CHARSET_H*/"   33 }   34 '  程序很简单:行2: 用grep过滤出包含Name和MIBenum的内容。行11-13: 保存Name的内容。行15-19: 产生CHARSET_DEF。行24-26: 产生枚举定义。行29-30:产生函数原型。 关于CHARSET_DEF可以参考:神奇的xx宏 ~~end~~


阅读全文(2899) | 回复(-1) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.352 second(s), page refreshed 144775376 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号