2012-09-24 312 views
0

我想为我的noob问题事先道歉,但我想grep的c文件的函数标题。所以我试图grep换行符“^”然后一些空格“”,然后一些字符“”然后一些空格“”,然后一些字符再次“”,然后再一些空格“ “then”(“then then number of characters”。“then”)“。grep东西空间东西()

我试图grep -E /^(*.*)\2 *\(.*\)/ *.c

grep -E /^ *.* *.* *\(.* *.*\*\)/ *.c 
       int foo (int bar, double cow) 

,但我不认为(和)的支持。我回来了,然后我想要。我怎么能grep像上面和更多的功能标题。再次,我的问题与上面的grep是我回到很多结果,我得到的东西没有()在他们。我只想要功能标题。感谢您的帮助。 BTW egrep '^[ \t]*[^ \t]*[ \t]*[^ \t]*[ \t]*[(][^ \t]*[)]' *.c

+0

你是否正在做这个代码审查或标记?在这种情况下,您可能想要尝试ctags,这样做,以及更多。它还与许多编辑器和IDE接口。 – sapht

+0

它是家庭作业的一部分,我需要从c文件中抓取函数标题,这样我就可以拥有包含所有函数声明的头文件。 – UniqueUsername

+0

好的。请记住,多行函数定义将不可能使用grep,只有单行匹配afaik。也许看看perl正则表达式。 – sapht

回答

0

为您的要求做到这一点?

grep -P "^\s*[\w ]+\([^\)]*\)" 
+0

这不起作用,但它返回循环和其他东西与()像printf(bla,bla)。我想通过要求换行空间的东西,将其缩小到只是功能标题。 – UniqueUsername

0

试试这个我不鼓励使用快捷键为空白,因为它是特定的实现。

+0

我收到消息:Badly placed()的 – UniqueUsername

+0

请尝试egrep并将正则表达式放在引号中 – lilalinux

+0

我收到了和以前一样的消息。 egrep/^ * [^] * * [^] * * [(] [^] * [)] * .c 放置不当()。 – UniqueUsername