이 작업을 수행하는 두 가지 방법을 생각할 수 있습니다.
첫 번째 방법은 파일을 소유하고 있다고 가정하지만 파일은 읽기 전용입니다.
vi의 느낌표 접미사를 write 명령 (: w!)에 사용하면 자신의 READONLY 파일을 강제로 덮어 씁니다. 물론 이것은 현재 폴더에서 쓰고 실행할 수있는 권한이 있다고 가정합니다.
:w!
vi가 원래 READONLY 파일을 덮어 씁니다.
두 번째 방법은 다른 사람이 파일을 소유하고 있다고 가정하고 해당 파일에 변경 사항을 저장하려고합니다.
이를 수행하는 한 가지 방법은 원래 파일의 변경 사항을 vi 내에서 ed 스크립트로 저장하는 것입니다. 이 ed 스크립트는 나중에 ed line editor를 사용하여 vi 외부에서 원본 파일 (또는 다른 유사한 파일)에 적용 할 수 있습니다.
현재 편집 세션을 ed 스크립트로 저장하는 방법은 --ed 명령 행 스위치를 사용하여 원본 파일 이름과 편집 된 vi 버퍼를 표준 입력으로 diff 유틸리티에 전달하는 것입니다. 즉, 차이점을 ed 스크립트로 표시합니다.
따라서 편집 된 vi 버퍼를 가정하고 다음을 수행하십시오.
:.,$!diff --ed [original_file] -
이렇게하면 현재 버퍼 (., $!)의 모든 행이 원본 파일을 현재 버퍼의 내용으로 변환하는 데 필요한 diff 생성 ed 스크립트 (diff --ed [original_file]-)로 바뀝니다. 그런 다음이 ed 스크립트를 안전한 곳에 저장하고 스크립트를 우리가 쓸 수있는 원본 파일의 버전에 적용하려고합니다. 따라서 스크립트를 쓰기 가능한 위치 (예 : 로그인 폴더)에 저장하십시오.
:w ~/my_ed_script
이제 vi를 종료하고이 ed 스크립트를 사용하여 처음에는 저장할 수없는 편집 된 파일을 얻습니다. bash 명령 행 프롬프트 '$'에서이를 수행하는 방법은 다음과 같습니다.
$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file
이 명령 순서는 diff로 생성 한 스크립트를 연결하고 ed 쓰기 명령 'w'를 ed의 표준 입력에 에코합니다. 그런 다음 Ed는이 스크립트를 원본 파일의 쓰기 가능한 복사본에 적용하고 수정 된 버퍼 변경 사항을 파일에 다시 씁니다.
따라서 vi에서 수행 된 작업을 원래 vi, diff 및 ed를 사용하여 다른 사람이 소유 한 파일에 저장하는 방법입니다.