문제
Linux의 VI편집기를 이용하여 파일의 내용을 수정할 때, 다음 내용을 만족하는 치환명령문은 무엇인가?
- 10행부터 20행까지 내용 중 ′old′ 문자열을 ′new′ 문자열로 수정한다.
- 각 행에 ′old′ 문자열이 여러 개 있어도 전부 수정한다.
① :10,20s/old/new ② :10,20s/old/new/g ③ :10,20r/old/new ④ :10,20r/old/new/a
정답
2번
해설
정답: 2. vi의 범위 치환은 ':시작행,끝행s/찾기/바꾸기/'이며, 한 행에 여러 개를 모두 바꾸려면 끝에 g(global) 플래그를 붙인다. 따라서 ':10,20s/old/new/g'가 정답이다.
오답 풀이
- 1번: ':10,20s/old/new'는 g가 없어 각 행에서 첫 번째 old만 바꾸므로 '전부 수정' 조건을 못 채운다.
- 2번: ':10,20s/old/new/g'는 10~20행의 모든 old를 new로 바꾸므로 정답이다.
- 3번: 'r'은 치환(s)이 아니라 파일 읽어오기(read)·문자 교체용이라 치환 문법이 아니다.
- 4번: 'r .../a' 역시 치환 문법이 아니며 잘못된 명령이다.
보충 개념 vi 치환: ':s/old/new/'(현재 행 첫 항목), ':s/old/new/g'(현재 행 전체), ':%s/old/new/g'(파일 전체), ':10,20s/old/new/g'(10~20행 전체). g는 행 내 모든 일치, %는 전체 행 범위를 뜻한다.