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

Bash脚本将x个起始注释行拖出到另一个文件中,bash,shell,comments,Bash,Shell,Comments,我正在寻找一个一行拉出任何文件中的第一个评论块。注释块如下所示: /* * This is a * comment block */ 我一直在试着和塞德玩,但就是没能让它正常工作。帮助?我知道这不完全是您所要求的,但使用一点python代码就可以轻松完成: #!/usr/bin/env python import sys f = open(sys.argv[1]) incomment = False for line in f: line = line.rstrip("\n")

我正在寻找一个一行拉出任何文件中的第一个评论块。注释块如下所示:

/*
 * This is a 
 * comment block
 */

我一直在试着和塞德玩,但就是没能让它正常工作。帮助?

我知道这不完全是您所要求的,但使用一点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>
python code.py
不使用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
*/
或相当于:

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

这是上面第二个版本,处理了ghostdog74的评论中提到的情况:

sed -n '\|^/\*.*\*/|{p;q};\|^/\*|,\|^ \*/|p;\|^ \*/|q' file
如果要处理行首和行尾的空白:

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

伙计,我真的需要学习一些
awk
!我做了
sed
,然后跳过了perl的
awk
。出于某种原因,如果您有类似于/**comment/It的注释,那么在第一行添加一个额外的“”。所以“/*”显示为“/**”事件没有考虑awk。不幸的是,我落后的Mac终端应用程序不支持-v选项。所以我不能测试你所做的provided@Corey:我认为在Mac电脑上,
-v
和变量名之间需要一个空格。@Dennis即使这样,它也只抓取前2个字符“/*”而不抓取块。这很酷,可以工作,但我确实在寻找bash行。这行不错,但不能100%工作。它将给出多行注释以及我的答案中的第二个示例文件。
sed -n '\|^/\*.*\*/|{p;q};\|^/\*|,\|^ \*/|p;\|^ \*/|q' file
sed -n '\|^[[:space:]]*/\*.*\*/|{p;q};\|^[[:space:]]*/\*|,\|^ \*/|p;\|^[[:space:]]*\*/|q'