이맥스 : 큰 파일에서 X 행부터 Y 행까지의 모든 행이있는 버퍼를 엽니 다.


10

이 다른 질문과 같은 정신으로 : 큰 파일에서 cat line X to line Y :

거대한 텍스트 파일에서 주어진 라인 세트 (예 : 라인 과 사이의 모든 라인)를 Emacs 내 에서 열고 버퍼에 표시 하는 방법이 있습니까?XY

예를 들어 파일에서 57890000 ~ 57890010 라인 사이의 모든 라인을 열고 버퍼에 표시하십시오. huge.txt

업데이트 : 줄을 편집하고 원본 파일에 저장할 수 있으면 좋을 것 같지만 적어도 읽기 전용 (표시 목적으로)으로 줄을 열 수있는 솔루션에 관심이 있습니다.


당신은 그것을 보거나 편집하고 싶습니까?
choroba

1
내에서 ed어때요? 57890000,57890010p
케빈

답변:


7

전체 파일을 열려면 (필수) 편집기 창에 파일의 일부만 표시하려면 좁히기를 사용하십시오 . 작업하려는 버퍼 부분을 선택하고 C-x n n( narrow-to-region)를 누릅니다 . 비활성화 된 명령에 대한 프롬프트가 표시되면“예”라고 말합니다. 전체 버퍼를 다시 보려면 C-x n w( widen)를 누르십시오 . 버퍼를 저장하면 전체 파일이 선택됩니다. 모든 데이터가 여전히 존재하며 좁 히면 보이는 내용 만 제한됩니다.

파일의 일부를 보려면 shell-command접두사 인수 ( M-1 M-!) 를 사용하여 파일을 현재 버퍼에 삽입 할 수 있습니다 . 적절한 명령을 실행하여 원하는 행을 추출하십시오 ( 예 :) <huge.txt tail -n +57890001 | head -n 11.

insert-file-contents바이트 범위를 취할 수 있는 Lisp 함수도 있습니다. M-:( eval-expression)로 호출 할 수 있습니다 .

(insert-file-contents "huge.txt" nil 456789000 456791000)

정수 크기 제한에 도달 할 수 있습니다 (버전 및 플랫폼에 따라 값을 확인하십시오 most-positive-fixnum).

이론적으로는 필요에 따라 파일의 일부를 투명하게로드하고 저장하는 Emacs 모드를 작성할 수 있습니다 (정수 크기의 제한으로 인해 32 비트 시스템에서는 실제 파일 오프셋 사용이 불가능할 수 있음). 내가 아는 방향으로의 유일한 노력은 VLF (GitHub link here )입니다.


1

펄과 엘리스 조합이 유용 할 수 있습니다. 데이터를 버퍼로 파이프 할 수 있습니다. 동일한 buffer-name을 사용한 후속 호출은 동일한 행에 새 행을 추가합니다.

버퍼를 "편집"할 수 있지만 편집은 소스 ( 파이프 )에 다시 반영 되지 않습니다. 행 번호를 표시하지 않지만 각 행에 번호가 붙은 접두사를 포함하도록 입력을 조정할 수는 있습니다. 선.

from=50000000
  to=50000010
<file_50 head -n "$to" | tail -n +"$from" | e-sink.pl

버퍼에서 :

<<<<< start: 2012-09-09T01:39:49
1000000
VSjU K97X5Z dFcc ZZd2OqQ PzbnphT
yQBTt LOic Ks sPXrq tty oy
dA8 SD BvO daZ KFPr44X
X0m3BI eR4go YjFp7e vbJr3oe Y0OGgH3 uPfz yfq59
we rm L9iD ugcJBND daS

7pO lwUFzNE HPlPW fmPZ vpRs Rx EFeHaFM
b0 1B ncr Db324 vwO Un34R
HDZS wq9zg W013 5JGly
kAfP QPpjjyh pXMAw I1 CGKDc23 qCBnP
<<<<<   end: 0.630s

또는 줄 번호가 추가 된 경우 :

from=50000000
  to=50000010
<file_50 head -n "$to" | tail -n +"$from" | nl -v$from -ba -w${#to} | e-sink.pl

버퍼에서 :

<<<<< start: 2012-09-09T01:53:44
50000000    1000000
50000001    VSjU K97X5Z dFcc ZZd2OqQ PzbnphT
50000002    yQBTt LOic Ks sPXrq tty oy
50000003    dA8 SD BvO daZ KFPr44X
50000004    X0m3BI eR4go YjFp7e vbJr3oe Y0OGgH3 uPfz yfq59
50000005    we rm L9iD ugcJBND daS
50000006    
50000007    7pO lwUFzNE HPlPW fmPZ vpRs Rx EFeHaFM
50000008    b0 1B ncr Db324 vwO Un34R
50000009    HDZS wq9zg W013 5JGly
50000010    kAfP QPpjjyh pXMAw I1 CGKDc23 qCBnP
<<<<<   end: 0.768s

나는 이것을 StackOverflow Q / A 에서 찾았다


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.