科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件一个用bash(awk)写的代码产生器

一个用bash(awk)写的代码产生器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

一个用bash(awk)写的代码产生器

作者: absurd 来源:CSDN 2008年1月16日

关键字: 代码产生器 Bash

  • 评论
  • 分享微博
  • 分享邮件

在所有脚本语言中,我对bash情有独钟。原因是它简单易用,即使很久没有用过了,看看帮助马上就可以想起来。另外,它作为shell,自然对其它应用程序有较好的亲和力,特别是与find/grep/sed/awk等小工具组合起来,威力更是非同小可。

 

今天用bash写了一个代码产生器,类似的手法我至少用过数十次了,其简单但很实用,放在这里供新手参考吧。

 

需求简述:在http://www.iana.org/assignments/character-sets文档中,描述了各种charset的名称和ID。我需要从charset的名称查询到它的ID,或者从charsetID查询到它的名称。

 

文档正文部分的格式类似于:

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过滤出包含NameMIBenum的内容。

11-13: 保存Name的内容。

15-19: 产生CHARSET_DEF

24-26: 产生枚举定义。

29-30:产生函数原型。

 

 

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章