Perl 또는 grep을 사용하여 텍스트 파일에서 특정 텍스트 복사

Perl 또는 grep을 사용하여 텍스트 파일에서 특정 텍스트 복사

다음과 같이 일반 텍스트 파일의 일부를 복사해야 합니다.

텍스트 파일은 다음 형식의 일련의 "페이지"로 구성됩니다.

<page    [lots of lines of text]       /page>

<page    [lots of lines of text]       /page>

<page    [lots of lines of text]       /page>

<page    [lots of lines of text]       /page>

세 번째 "페이지"를 복사하는 자동 방법이 필요합니다. 찾을 수 있는 단축키가 있나요? (마찬가지로 "3rd"를 "23rd"로 바꾸는 등)

이상적으로는 파일의 압축을 풀고 결과 텍스트 파일에 복사한 다음 다시 압축하는 bash 스크립트를 원합니다. 이것의 목적은 xournal이 페이지를 복사하도록 하는 것입니다.

답변1

이를 위해 실제 태그 파서를 사용해야 하지만 최소한 형식 설명을 다음과 같이 해석해야 합니다.

<page line one
line two /page>
<page line three
line four /page>
<page line five
line six /page>

빠른 awk해결 방법 1 이 허용된다면 이렇게 할 수 있습니다.

awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=RS} FNR==pagenum {print} 1' file

아니면 덜 신비스럽습니다.

awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=RS}; FNR==pagenum {print}; {print}' file

여기서 복사하려는 페이지 번호는 쉘의 인수로 전달됩니다 -v pagenum=.


마지막 태그 뒤에 "stuff"가 있는 경우 /page>위의 표현식은 이를 불완전한 레코드로 처리하고 가짜 최종 /page>레코드 구분 기호를 추가할 수 있습니다. 이 경우 다음 수정된 표현식이 더 잘 작동할 수 있습니다.

awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=""; OFS=""} FNR==pagenum {print $0,RT} {print $0,RT}' file
  1. gawk3.1.8 및 3.3에서 mawk테스트되었습니다 .

관련 정보