这是我昨天遇到的另一个问题的下一部分,Awk doesn't match all match all my entries。我想用perl替换awk,我的第一个目标是在.c中提取函数声明并将其放入.h中。所以我想出了这个:
cat dict3.c | perl -ne '/([a-z_*]+[[:space:]]+[a-z_*]+[[:space:]]*\(.*?\))/i; print $1 . ";\n"'但输出结果是:
;
;
;
;
;
;
;
;
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dictent_t* dictentcreate(const char * key, const char * val);
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
dict_t* dictcreate();
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdestroy(*dict_t d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
void dictdump(dict_t *d);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictlook(dict_t *d, const char * key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
int dictget(char* s, dict_t *d, const char *key);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t* dictadd(dict_t* d, const char * key, const char * val);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t dictup(dict_t d, const char * key, const char * newval);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);
dict_t* dictrm(dict_t* d, const char * key);而文件中的每个函数只有一个声明。我不知道它是什么,因为每一行打印的重复次数不一样,所以它不可能只是一个循环……
发布于 2015-10-16 03:22:45
因为您没有在匹配正则表达式时使print命令有条件。试试这个:
perl -ne '/([\w*]+\s+[\w*]+\s*\(.*?\))/i and print $1 . ";\n"' dict3.c
# .......................................^^^对于每一行,您都会打印上次成功匹配的匹配文本。
https://stackoverflow.com/questions/33156526
复制相似问题