Bash脚本将x条起始注释行拉出到另一个文件中

时间:2010-04-17 03:41:56

标签: bash shell comments

我正在寻找一个衬垫来拉出任何文件中的第一个评论块。注释块看起来像这样:

/*
 * This is a 
 * comment block
 */

我一直在尝试使用sed,但是无法让它正常工作。帮助

3 个答案:

答案 0 :(得分:3)

$ cat file
one two
// comment.....
/*
 * This is a
 * comment block
 */
# asdgihj
/* adsjf */

$ awk -v RS="*/" -vFS="/[*]" 'NR==1{print "/*"$2RT}' file
/*
 * This is a
 * comment block
 */

$ cat file
/* * comment */
/*
 * This is a
 * comment block
 */
/* adsjf */
$ awk -v RS="*/" -vFS="/[*]" 'NR==1{print "/*"$2RT}' file
/* * comment */

另一种不使用gawk RS

的方法
$ cat file
dsfsd
/*
 * This is a
 * comment block
 */ sdff
blasdf
/* adsjf */

$ awk '/\/\*/&&/\*\//{print;exit}f&&/\*\//{print "*/";exit}/\/\*/&&!/\*\//{f=1}f' file
/*
 * This is a
 * comment block
*/

答案 1 :(得分:3)

sed -n '/^\/\*/,/^ \*\//p;/^ \*\//q' file

或等效地:

sed -n '\|^/\*|,\|^ \*/|p;\|^ \*/|q' file

修改

以上是第二个版本的句柄,处理 ghostdog74的评论中提到的情况:

sed -n '\|^/\*.*\*/|{p;q};\|^/\*|,\|^ \*/|p;\|^ \*/|q' file

如果你想在行的开头和结尾处理空格:

sed -n '\|^[[:space:]]*/\*.*\*/|{p;q};\|^[[:space:]]*/\*|,\|^ \*/|p;\|^[[:space:]]*\*/|q'

答案 2 :(得分:1)

我知道这并不是你要问的问题,但用一些python代码来实现它是非常容易的:

#!/usr/bin/env python
import sys

f = open(sys.argv[1])

incomment = False
for line in f:
  line = line.rstrip("\n")
  if "*/" in line:
    print line
    break
  elif "/*" in line:
    incomment = True
    print line
  elif incomment:
    print line

运行:

python code.py <filename>