使用Grep查找C文件的变量

时间:2016-08-13 07:03:51

标签: c bash shell variables grep

例如,让我说我有这个代码

#include <stdio.h>

int main(void)
{
    int x = 99;
    int *p1, *p2;
    char y[10] = "a"
    // some code
    // some code

    return 0;

}

因此,在本规范中,有两个主要类型为intchar的变量。现在,让我们说我做了至少400 - 500行的代码,其中我初始化了20-30变量。现在,我想创建一个bash脚本来查找此代码中的变量。我以这种方式开始cat code.c | grep int这将在上面给出的场景中打印int main void()函数,并打印int x =99//some code语句,但我想严格打印这些行{{ 1}}和int x=99;每个行。

所以现在,在上面的问题中我也有一个变量数据类型int *p1, *p2,现在我如何以char之后的方式构建我的Bash脚本我只使用特定的数据类型cat int char double,是否有float方法?或者有没有比cat和Grep更简单的方法来执行相同的操作?

所以我的最终输出应为OR int x=99;int *p1, *p2:)

期待回应。

1 个答案:

答案 0 :(得分:1)

您可以使用grep的方法查找以空格开头的行,然后使用基本正则表达式 intchar。为:

$ grep '^[ ][ ]*\(int\|char\)' yourfile.c
int x = 99;
int *p1, *p2;
char y[10] = "a"

如果您有初始tab个字符(或混合spacestabs),则可以使用 Perl兼容正则表达式

$ grep -P '^[ \t]+(int|char)' yourfile.c
int x = 99;
int *p1, *p2;
char y[10] = "a"

我不知道这是否正是您所寻找的,如果没有,请告诉我。还有其他的c代码扫描仪可以提取和汇总变量,函数等,例如: cproto是我使用过的并且非常喜欢的。您还可以在sourceforge上查看其他一些内容。

解释(来自评论)

鉴于这个例子,很明显只有intchar等才能在空白之后(例如错过int main ()声明)。考虑到这一点,我们使用基本正则表达式设置grep,至少需要1space使用 BRE )或混合tab和{{1在搜索词之前是可能的(使用 PCRE )。仅使用 BRE 处理空格:

space

或处理混合空格和制表符时,> PCRE

grep '^[ ][ ]*

将搜索grep -P `^[ \t]+ 固定在该行的开头,并使用 BRE 查找带有字符类的^ { {1}}。要处理至少一个空格,并且对于space或更多其他 [ ],我们会额外添加zero

如果涉及多个(或混合的)spaces[ ]*(使用 BRE 无法轻松处理),则PCRE基本上对两个{{{ 1}}和spaces,同时牺牲了PCRE提供的扩展表达式处理的一些可移植性。 tabs将在搜索字词之前容纳spacetab^[ \t]+one个字符的实例。 more要求字符类中的字符至少存在space更多匹配。

在查找tab+时,基本正则表达式格式为

1

其中intchar BRE 中不具有特殊含义,并且必须在 PCRE 表格中进行转义:

\(int\|char\)

所以完全放在它之前,它只是固定搜索一个或多个((或使用 PCRE 混合|(int|char) )字符spacespace确定要显示的行。

希望有所帮助。