문제
vi 에디터의 치환기능을 이용하여 kait.txt 파일 내 문자열을 치환하려고 한다. 다음 중 vi에서 수행한 치환 명령으로 알맞은 것은?
① 1,$s/ihd/linux
② 1,$s/ihd/linux/g
③ %s/
정답
4번
해설
정답: 4. 결과를 보면 단독 단어 "ihd" 만 "linux" 로 바뀌고 "ihd_linux", "ihd_linux2" 의 ihd 부분은 그대로다. 즉 단어 경계(<ihd>)에 정확히 일치하는 경우만 치환해야 한다. 따라서 "%s/<ihd>/linux/g" 가 맞다.
오답 풀이
- 1번: "1,$s/ihd/linux" 는 단어 경계가 없어 ihd_linux 의 ihd 까지 바꾸고, /g 가 없어 줄당 첫 번째만 치환된다.
- 2번: "1,$s/ihd/linux/g" 도 단어 경계가 없어 ihd_linux 류의 부분 문자열까지 치환된다.
- 3번: "%s/
/linux" 는 단어 경계 표기가 < > 가 아닌 < > 라 의도대로 동작하지 않고 /g 도 없다. - 4번: "%s/<ihd>/linux/g" 로 단어 ihd 만 정확히 치환하므로 옳다.
보충 개념 vi 치환: ":%s/패턴/대체/g" 에서 % 는 전체 행, g 는 한 줄 내 모든 일치를 의미한다. "<단어>" 는 단어 경계로 부분 일치를 막는다.