문자열 줄 패턴과 일치할 때까지 파일의 모든 줄을 삭제하는 방법은 무엇입니까? [복사]

문자열 줄 패턴과 일치할 때까지 파일의 모든 줄을 삭제하는 방법은 무엇입니까? [복사]

문자열 줄 패턴과 일치할 때까지 파일의 줄을 삭제하는 방법은 무엇입니까?

cat test.txt
The first line
The second line
The third line
The fourth line
pen test/ut
The sixth line
The seventh line

쉘/파이썬 스크립트를 사용하여 파일 문자열 패턴 "펜 테스트"와 일치할 때까지 위 파일의 모든 줄을 삭제하고 싶습니다.

예상 출력: 위 줄을 제거한 후 "test.txt" 파일에는 다음 줄만 포함되어야 합니다.

The sixth line
The seventh line

답변1

GNU sed 사용: 첫 번째 일치 이전의 모든 항목을 제거하고 파일을 그 자리에서 수정합니다.

sed -i '0,/pen test/d' test.txt

답변2

다음을 수행할 수 있습니다.

cat test.txt | grep -A2 "pen test/ut" | sed "1 d"
The sixth line
The seventh line

답변3

유틸리티를 사용하여 다음과 같이 수행할 수 sed있습니다 Perl.

perl -ne '
  next unless /pen/;  #  skip till we meet the first interesting record
  print <>;           # <> in the list context, fetches the entire remaining file
' input-file.txt

sed -ne '
   /pen/!d
   n
   :loop
      $!N;P;s/.*\n//
   tloop
' input-file.txt

sed -ne '
   /pen/!d  ;# reject lines till we see the first interesting line
   n        ;# skip the first time we see the interesting line
   :n       ;# then setup a do-while loop which"ll do a print->next->print->... till eof
      p;n   ;# the looping ends when the n command tries to read past the last record
   bn
' input-file.txt

답변4

펄 사용:

perl -ni.bck -e '$i++,next if /^pen test/;print if $i' file

그러면 입력 파일을 읽고 해당 위치에서 업데이트됩니다. 원본 파일은 접미사 확장명으로 보존됩니다 .bck.

파일의 각 줄을 읽을 때 $i한 줄이 다음으로 시작 하고 다음 줄을 읽으면 pen test플래그가 설정됩니다 . 0이 아닌 경우 $i(참 조건) 해당 행이 인쇄됩니다.

업데이트하지 않고 관심 있는 행만 추출하려면 다음을 수행하세요.

perl -ne '$i++,next if /^pen test/;print if $i' file

관련 정보