대용량 파일의 첫 번째 줄을 편집하는 데 을(를) 사용하려고 하는데 모든 줄을 읽으려면 ed
기다려야 합니다 . 전체 파일 읽기를 ed
중단하고 현재 줄이 첫 번째 줄이 되도록 즉시 편집을 시작할 수 있는 방법이 있습니까 ?ed
답변1
shellter가 언급한 대로 ed
이 작업을 수행할 수 없습니다. 대부분의 편집 작업에서는 파일을 다시 작성해야 하며 그 자리에서 교체만 수행할 수 있습니다. 이 경우 를 사용할 수 있습니다 hexedit(1)
.
메모리를 덜 소모하는 방법은 sed
작업을 사용하는 것입니다(예: 교체).팔월~와 함께6월첫 번째 줄에:
sed '1s/August/June/' FILE > NEWFILE
답변2
ed
전체 파일 읽기를 중지하거나 편집기로 문서를 연 후 편집 버퍼의 첫 번째 줄을 현재 줄로 자동으로 만드는 것은 불가능합니다 .
편집기 ed
는 항상 명령의 영향을 받는 마지막 줄(또는 명령이 이면 바로 뒤 또는 앞)에 사용자를 배치하고 시작 시 파일을 읽는 것은 현재 편집 버퍼를 버리고 편집을 위해 명명된 파일을 여는 를 d
사용하는 것과 유사합니다. e filename
, 현재 줄을 파일에서 읽은 마지막 줄로 설정합니다.
비대화형 방식으로 큰 문서를 변경하려는 경우 이러한 도구는 스트림에서 작동하고 기본적으로 전체 문서를 메모리로 읽지 않으므로 더 나은 대안을 사용 sed
하거나 제공할 수 있습니다.awk
대용량 문서를 대화형으로 편집하려면 를 사용하여 문서를 여러 부분으로 분할하고 split
수정하려는 부분을 편집한 다음(또는 다른 편집기를 사용하여 ed
) vi
을 사용하여 간단히 cat
연결하는 것이 좋습니다. 덩어리가 다시 모입니다.
다음에서 대용량 파일의 처음 5줄을 편집하기 위한 가상 편집 세션 ed
:
$에드 전자! head -n 5 거대한 파일 123 g/^/m0 와! { 고양이 - ; tail -n +6 거대한 파일 ; } >hugefile.new 큐
즉, 의 출력을 편집하도록 요청합니다 head -n 5 hugefile
. 여기서 수행하는 편집은 단순히 줄을 바꾸는 것입니다( g/^/m0
"각 줄을 차례로 첫 번째 줄 앞으로 이동"). 그런 다음 수정된 편집 버퍼를 원본 파일의 6번째 줄부터 버퍼 내용과 연결하는 셸 명령에 기록합니다. 결과는 새 파일 이름에 기록됩니다. Q
그런 다음 편집기를 종료합니다.