在bash中,如何打印文件中的第一条C风格注释

在bash中,如何打印文件中的第一条C风格注释,bash,parsing,comments,Bash,Parsing,Comments,我正在寻找一个bash one liner,用于在包含版权信息的源文件顶部打印注释。在这些示例上调用命令应该会产生所描述的输出 /* * copyright 2004 */ package Foo ... 应该打印前三行 /* copyright 2004 */ package Foo ... 应该打印第一行 package Foo /* some other comment */ ... 不应打印任何内容 我认为用perl或awk应该很容易做到,但我似乎无法让它工作。此awk命令似乎

我正在寻找一个bash one liner,用于在包含版权信息的源文件顶部打印注释。在这些示例上调用命令应该会产生所描述的输出

/*
 * copyright 2004
 */
package Foo
...
应该打印前三行

/* copyright 2004 */
package Foo
...
应该打印第一行

package Foo
/* some other comment */
...
不应打印任何内容


我认为用perl或awk应该很容易做到,但我似乎无法让它工作。

此awk命令似乎可以与给定的输入一起工作,但对于一般用途来说可能不够可靠:

awk 'NR==1&&/^\/\*/{s=1}s==1{print $0}s==1&&$NF=="*/"{s=0}' test.c
为了打印输出,第一行应该以
/*
开头,它将打印所有行,直到到达以
*/
结尾的行

更新:为了处理
/*
前面的空格和文件开头的空行,我们可以使用这个命令

 awk 'NF==0&&s==0{NR=0}NR==1&&$1=="/*"{s=1}s==1{print $0}$NF=="*/"{s=2}' test.c

你是对的。如果在
/*
之前有空格字符,并且开头有空行,则不起作用。@thefourtheye现在应该也适用于您提到的情况,但我确信还有更多我们没有想到的情况…:-)