热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言中使用类似awk的功能

awk实在是太强大了,非常复杂的任务,几行代码就可以解决,awk经常需要用到,但是在c语言里面,调用system不太优雅,能不能直接在c语言中直接调用呢,简单实现了一些功能,但大多数情况,

awk实在是太强大了, 非常复杂的任务,几行代码就可以解决, awk经常需要用到, 但是在c语言里面, 调用system不太优雅, 能不能直接在c语言中直接调用呢,简单实现了一些功能, 但大多数情况,够用了,参考

https://github.com/yiifburj/my_tools/blob/master/simple_use_of_awk_in_c.c

 

后面有一个示例, 可以参考, 使用方法主要是 填写

struct awk_st
{
#define PATTERN_NUM 3
#define PATTERN_SIZE 16
    int pattern_num;
    char pattern[PATTERN_NUM][PATTERN_SIZE];
    awk_begin_t fun_begin;
    awk_end_t fun_end;
    char action_default[0];
    awk_action_t actions[PATTERN_NUM];
    char data[0];
};

 pattern可以不写, 但至少写一个action,除非不需要, 多个pattern的时候个数要和action保持一致并且一一对应,同时要设置 pattern_num, pattern使用POSIX Extended Regular Expression , fun_begin fun_end fun_action都需要自己实现, 可以为NULL, data[0]指向的部分会被传入到fun_begin fun_end fun_action中.

同时提供了字符串替代函数

/* not found also return 0 */
int awk_str_replace_inplace(char *src, const char *old, const char *new);
int awk_str_replace(const char *src, const char *old, const char *new, char buf[], int bufsize);
int awk_str_replace_regex(const char *src, const char *pattern, const char *new, char buf[], int bufsize);
int awk_str_replace_regex_inplace(char *src, const char *pattern, const char *new);
失败返回负数

 

详情参考代码。


推荐阅读
author-avatar
少女24梦_276
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有