2010-05-24 6 views
3

텍스트 파일이 있고 위의 모든 줄을 추출하고 싶습니다! --- 주석 ---! 줄 번호를 기반으로하지 않고 새 파일에 추가합니다 (단, 주석을 확인하는 것). 어떻게하면 좋을까요? 당신 나오지 프로그램이 초기 중지 된 경우셸 도구를 사용하여 파일의 일부분을 추출하십시오.

test123 
bob 
ted 
mouse 
qwerty 
!--- comment ---! 
123456 
098786 

답변

1
sed -n '/^!--- comment ---!$/q;p' somefile.txt 
1

파일의 경우, 그것은 중요하지 않습니다; 파이프 입력의 경우, 일찍 중지하면 일부 프로그램이 화가납니다. 사람들을 위해, 당신은 이후 주석에서 삭제해야합니다 :

sed '/^!--- comment ---!$/,$d' somefile.txt 

당신이 정말로 쉘 도구보다는 떠들썩한 파티를 사용해야하는 경우와 같은 나오지으로, 다음 :

x=1 
while read line 
do 
    if [ "$line" = "!--- comment ---!" ] 
    then x=0 # Or break 
    elif [ $x = 1 ] 
    then echo "$line" 
    fi 
done < somefile.txt 

그 코드는 보른과 함께 작동하며 Korn 셸을 사용하고 있으며 Bourne 셸 (예 : POSIX 호환 셸)을 기반으로하는 거의 모든 셸에서 작동 할 것으로 기대합니다.

1

사용은 나오지도, 또는 while loop :

while read line 
do 
    if [[ $line = '!--- comment ---!' ]]; 
    then 
     break; 
    else 
     echo $line; 
    fi; 
done <input.txt> output.txt 
0
awk '/!--- comment ---!/ {exit} 1' somefile.txt 

댓글이 변수 인 경우 :

awk -v comment="$comment_goes_here" '$0 ~ comment {exit} 1' somefile.txt 

후행 1은 단순히 모든 기본 동작 (인쇄)를 사용하는 AWK 지시 달리 일치하지 않는 행.

관련 문제