2008-10-13 2 views
9

이 작업을 수행하는 간단한 스크립트를 작성할 수는 있지만 유닉스에서 더 많은 familliar를 얻으려는 나의 지속적인 탐구에서 대신 내장 된 명령을 사용하여 효율적인 방법을 배우고 싶습니다.일치하는 항목이 발견 될 때까지 파일 줄을 건너 뛰고 나머지를 출력하십시오.

헤더 행의 수가 가변적 인 매우 큰 파일을 처리해야합니다. 마지막 헤더 행은 'LastHeaderLine'텍스트로 구성됩니다. 나는이 줄 뒤에 모든 것을 출력하고 싶다. (I 거짓 긍정적 인 일치에 대해 걱정하지 않아요.)

답변

6

나오지 사용 :

sed -ne '/LastHeaderLine/,$p' <inputfile 

는 파일의 끝에 정규식 일치에 이르기까지 모든 것을 일치합니다. 'p'는 일치하는 행을 인쇄합니다.

편집 :

두 번째 생각에

, 당신은 LastHeaderLine 일치하는 라인을 인쇄하지 않습니다. 이것은 sed와는 관련이 없습니다. 펄에서는 다음을 할 수 있습니다 :

perl -ne 'if ($flag) {print;} if (/LastHeaderFile/) {$flag=1;}' <inputfile 

이렇게하면 정규식 일치를 엄격하게 따르는 줄만 인쇄됩니다.

9

왜 awk를 시도하지 않겠습니까? 그 결과는 다음과 같습니다 NR == 1은 첫 번째 줄 마찬가지입니다

awk 'NR == 1, /LastHeaderLine/ { next } { print }' myinputfile > myoutputfile 

, 은/LastHeaderLine/ 마지막 헤더 행과 일치합니다. 쉼표 연산자는 다음 함수를 허용합니다. {다음} 두 정규 표현식의 범위에있는 모든 문장을 실행합니다. 이 경우 추가 작업없이 입력의 다음 줄로 건너 뜁니다. 다른 모든 입력 행의 경우, 행을 표준 출력으로 인쇄합니다.>를 사용하여 리디렉션 할 수 있습니다.

20

Avi의 답변과 유사하지만 "LastHeaderLine"이있는 행은 포함하지 않습니다.

sed -e '1,/LastHeaderLine/d' 
+0

그건 내 것이 훨씬 깨끗합니다. – Avi