Ex/vim ex-mode와 sed는 완전히 다른 유틸리티입니까, 아니면 동일한 작업을 위한 두 개의 다른 프로그램입니까?

Ex/vim ex-mode와 sed는 완전히 다른 유틸리티입니까, 아니면 동일한 작업을 위한 두 개의 다른 프로그램입니까?

나는 sed(스트림 편집기)가 스크립팅 및 일괄 처리에 유용한 비대화형 편집기라는 것을 알고 있습니다. 나는 또한 ex와 그것이 vim 호출이라는 것을 이해합니다. ex-mode는 비대화형 텍스트 처리를 위한 라인 편집기입니다. 내 질문은 어느 것이 더 좋고 더 유용한지에 대한 의견이 아니라 sed와 구별되는 ex/ex-mode에 대한 의도된 사용 사례나 이점이 있는지에 대한 것입니다. 내가 묻는 이유는 sed를 선호하여 이전 모드를 무시하여 내가 놓치고 있는 것이 있는지 확인하기 위한 것입니다. 미리 감사드립니다.

답변1

한 가지 주요 차이점은전- 그리고sed전자는 (적어도 Vim 구현에서는) 전체 파일을완충기그리고 그것에 대해 작동합니다. sed의 "s"는 다음을 의미합니다.스트리밍, 즉 sed는 입력 파일을 한 줄씩 읽고 이동 중에 출력합니다. 따라서 sed는 매우 큰 파일을 쉽게 처리하는 반면, ex/Vim은 운영 체제의 가상 주소 공간이 필요하고 읽기 및 쓰기 속도가 상당히 느립니다.

따라서 sed를 사용하면 이전 줄의 컨텍스트를 유지해야 하는 경우 이를 명시적으로패턴 공간, 또는 사용 가능한 단일에 저장하십시오.공간을 확보하다. 반면 ex/Vim에서는 이전 줄로 다시 탐색하거나 버퍼의 여러 줄에 걸쳐 있는 정규식을 사용할 수 있습니다. 게다가 하나만 있는 것도 아니고공간을 확보하다, 그러나 여러명명된 레지스터Vim에서(라고 함)명명된 버퍼예)에서. 따라서 단일 저장 공간이 충분하지 않은 경우 sed에서 sed로 업그레이드해야 합니다.(스트리밍 측면을 유지하기 위해) ex/Vim으로 전환하세요.

실제로

Vim에 이미 파일이 열려 있다면 자연스럽게 다음을 사용합니다.전 모드특정 텍스트 조작의 경우. :substitute(적어도 나에게는) 가장 자주 사용되는 명령 중 하나입니다. 많은 ex 명령에는 해당하는(종종 재귀적) 명령이 있습니다.매크로구현; 작업(및 개인 선호도/능력)에 따라 둘 중 하나를 더 자주 사용하는 경향이 있습니다.

sed자동화 작업의 경우 // 도구 체인 awk을 선호합니다 Perl. 여기서 좋은 점은 sed를 사용하여 소규모로 시작할 수 있으며 일단 기능의 한계에 도달하면 더 강력하지만 더 복잡하고 더 큰 다음 도구로 쉽게 마이그레이션할 수 있다는 것입니다. 이것이 일회성 자동화 작업이고 구현을 크게 단순화하는 멋진 매크로나 Vim 플러그인에 대해 이미 알고 있다면 다음에서 Vim을 비대화형 명령줄 유틸리티로 사용하는 것을 고려합니다.자동 Ex 모드. 다른 작업의 경우 이는 종속성(Vim, 플러그인, 내 개인 구성에 대한)으로 인해 일반적으로 옵션이 아닙니다.

요약

sed만으로 많은 일을 할 수 있고 다른 것은 아무것도 할 수 없습니다. Vim 사용자가 아닌 경우(특히 Vim을 사용하는 경우)다른ex(모드)는 그다지 중요하지 않지만 어쨌든 구문이 sed와 밀접하게 일치하므로 결코 멀리 있지 않습니다.

관련 정보