【发布时间】:2016-08-13 07:03:50
【问题描述】:
例如,假设我有这个代码
#include <stdio.h>
int main(void)
{
int x = 99;
int *p1, *p2;
char y[10] = "a"
// some code
// some code
return 0;
}
因此,在此代码中,有两个主要类型为 int 和 char 的变量。现在,假设我编写了至少 400 - 500 行的代码,其中我已经初始化了 20-30 变量。现在,我想制作一个 bash 脚本来查找此代码中的变量。我以这种方式开始cat code.c | grep int 这将在上述给定的场景中打印int main void() 函数并打印int x =99 和//some code 语句,但我想严格打印这些行int x=99; 和int *p1, *p2 不每一行。
所以现在,在上面的问题中,我也有一个变量数据类型char,现在我如何构造我的 Bash 脚本,在 cat 之后我只 grep 特定的数据类型,如 int @ 987654333@doublefloat,有没有OR的方法呢?或者有没有比 cat 和 Grep 更简单的方法来执行相同的操作??
所以我的最终输出应该是 int x=99; int *p1, *p2 , char y[10] = "a" :)
期待回复。
【问题讨论】:
-
用一个正则表达式很难做到这一点。我的意思是真的很难。实际上,编写一个识别通用 C 变量声明的程序可能更容易,例如使用
lex和yacc。 -
bash、grep、sed、awk等不是执行此操作的正确工具。正如 Joachim 所提到的,一种编程语言(除了一些特殊的例外)具有复杂的词汇和语法结构,其完整描述通常需要数十页专用语言,如lex和yacc。尝试对正则表达式做同样的事情是个坏主意。 -
您可以使用
ctags完成这项工作 -
C 语言很复杂。这是不可能的——再读一遍:不可能——通过使用正则表达式来捕获每个语法正确的变量声明/赋值。
-
声明可以跨行拆分,中间有 cmets,使用宏,...
标签: c bash shell variables grep