我想为C源文件中定义的每个函数找到它被调用多少次以及在哪一行上。 我应该在C中搜索看起来像函数定义的模式,然后计算函数名称出现的次数。如果是这样,我该怎么办?常用表达? 任何帮助将受到高度赞赏!
#!/bin/bash
if [ -r $1 ]; then
#??????
else
echo The file \"$1\" does NOT exist
fi
最终结果是:(请报告任何错误)
10 if [ -r $1 ]; then
11 functs=`grep -n -e "\(void\|double\|char\|int\) \w*(.*)" $1 | sed 's/^.*\(void\|double\|int\) \(\w*\)(.*$/\2/g'`
12 for f in $functs;do
13 echo -n $f\(\) is called:
14 grep -n $f $1 > temp.txt
15 echo -n `grep -c -v -e "\(void\|double\|int\) $f(.*)" -e"//" temp.txt`
16 echo " times"
17 echo -n on lines:
18 echo -n `grep -v -e "\(void\|double\|int\) $f(.*)" -e"//" temp.txt | sed -n 's/^\([0-9]*\)[:].*/\1/p'`
19 echo
20 echo
21 done
22 else
23 echo The file \"$1\" does not exist
24 fi
答案 0 :(得分:1)
这可能有点工作。第一位找到像
这样的函数定义<datatype> <name>(<stuff>)
并取出<name>
。然后grep为那个字符串。有很多情况下这不起作用,但是如果你试图制作一个适用于某些程序的简单shell脚本,它可能是一个很好的起点。
functions=`grep -e "\(void\|double\|int\) \w*(.*)$" -f input.c | sed 's/^.*\(void\|double\|int\) \(\w*\)(.*$/\2/g'`
for func in $functions
do
echo "Counting references for $func:"
grep "$func" -f input.c | wc -l
done
答案 1 :(得分:1)
您可以尝试使用此正则表达式
(^|[^\w\d])?(functionName(\s)*\()
例如搜索所有printf
次出现
(^|[^\w\d])?(printf(\s)*\()
要将此表达式与grep
一起使用,您必须使用-E
选项,就像这样
grep -E "(^|[^\w\d])?(printf(\s)*\()" the_file.txt
最后请注意,此解决方案的缺失是跳过评论bloks中的事件。