2010-04-17 2 views
2

모든 파일에서 첫 번째 주석 블록을 꺼내기 위해 하나의 라이너를 찾고 있습니다. 댓글 블록은 다음과 같습니다.시작 줄 x 개를 다른 파일로 끌어 오기위한 Bash 스크립트

/* 
* This is a 
* comment block 
*/ 

나는 sed와 함께 놀려고했지만 제대로 작동하지 못했습니다. 도움?

#!/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> 

답변

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' 
+0

Annnnnnd 감사합니다. –

+0

좋은 것이지만 100 % 작동하지 않습니다. 그것은 내 대답에 두 번째 샘플 파일뿐만 아니라 여러 줄 주석을 제공합니다. – ghostdog74

1

나는 당신이 요구되지만 조금 파이썬 코드로 할 말도 안되게 쉽게 정확히하지 알고 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 
*/ 
+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 */ 

또 다른 방법은없는

+0

이봐, 나 * 정말로 * 'awk'을 배워야 해! 나는'sed'를 실행 한 다음'awk'를 perl로 건너 뛰었습니다. 어떤 이유 –

+0

당신이 추가 /* * 코멘트 */ 같은 주석이 첫 번째 줄에 "*"여분의 경우. 그래서 "/ *"는 "/ **"로 나온다. –

+0

내 메시지가 엉망이되어 버린 메시지 –