문제
다음 중 vi 편집기에서 줄의 linux로 끝날 경우 마지막에 '.' 기호를 덧붙이도록 치환하는 명령으로 알맞은 것은?
① :% s/linux$/linux./ ② :% s/linux./linux$/ ③ :% s/linux\>/linux./ ④ :% s/linux./linux\>/
정답
1번
해설
정답: 1. 정규표현식에서 $ 는 "줄의 끝"을 뜻하므로 /linux$/ 는 줄 끝이 linux 로 끝나는 경우를 매칭한다. 이를 linux. 로 치환하면 끝에 마침표가 덧붙는다. 따라서 ":% s/linux$/linux./" 가 옳다.
오답 풀이
- 1번: linux$(줄 끝의 linux)를 찾아 linux. 로 바꾸므로 옳다.
- 2번: 찾는 패턴과 바꿀 문자열이 뒤바뀌어, linux. 를 linux$ 로 치환하는 잘못된 형태이다.
- 3번: linux> 는 "단어 끝" 경계를 뜻해 줄 끝 조건이 아니며, 줄 중간의 linux 도 매칭되어 의도와 다르다.
- 4번: 찾기·바꾸기 대상이 뒤바뀐 데다 > 까지 사용해 의도와 어긋난다.
보충 개념 vi/정규식 앵커: ^(줄 시작), $(줄 끝), <·>(단어 경계). :% s/패턴/치환/ 은 전체 줄에 대해 치환을 수행한다(g 플래그를 붙이면 한 줄 내 모든 일치도 치환).