문제
다음 중 vi 편집기에서 linux로 끝나는 줄의 마지막에 마침표(.)을 덧붙이도록 치환하는 명령으로 알맞은 것은?
① :% s/linux./linux$/ ② :% s/linux$/linux./ ③ :% s/linux/linux./ ④ :% s/linux/linux$/
정답
2번
해설
정답: 2. 'linux 로 끝나는' 줄을 찾으려면 정규식에서 줄 끝을 의미하는 $ 를 사용해 linux$ 로 매칭하고, 이를 'linux.' 로 치환하면 끝에 마침표가 붙는다. 따라서 ':% s/linux$/linux./' 가 옳다.
오답 풀이
- 1번: :% s/linux./linux$/ 는 찾는 패턴의 .(임의 문자)과 치환문의 $(리터럴)이 의도와 반대로 쓰였다.
- 2번: linux$(줄 끝의 linux)를 linux. 로 바꾸므로 요구사항에 정확히 부합한다.
- 3번: :% s/linux/linux./ 는 줄 끝 조건($)이 없어 줄 중간의 linux 까지 모두 바뀐다.
- 4번: 치환 결과가 'linux$' 가 되어 의도한 마침표가 아니라 $ 문자가 붙는다.
보충 개념 vi 치환은 :범위 s/찾을패턴/바꿀문자열/ 형식이며, % 는 전체 줄을 의미한다. 정규식에서 $ 는 줄의 끝, ^ 는 줄의 시작을 뜻한다.