我正在寻找一个衬垫来拉出任何文件中的第一个评论块。注释块看起来像这样:
/*
* This is a
* comment block
*/
我一直在尝试使用sed,但是无法让它正常工作。帮助
答案 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>