ed: 첫 번째 줄을 기본 현재 줄로 설정

ed: 첫 번째 줄을 기본 현재 줄로 설정

대용량 파일의 첫 번째 줄을 편집하는 데 을(를) 사용하려고 하는데 모든 줄을 읽으려면 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그런 다음 편집기를 종료합니다.

관련 정보