문제
다음 중 vi 편집기에서 단어의 시작이 linux 인 경우에만 전부 Linux로 치환하는 명령으로 알맞은 것은?
① :% s/^linux/Linux/g ② :% s/<linux/Linux/g ③ :% s/Linux/^linux/g ④ :% s/Linux/<linux/g
정답
2번
해설
정답: 2. vi(ex) 치환에서 "<" 는 단어의 시작 경계를 뜻하는 메타문자이다. 따라서 ":% s/<linux/Linux/g" 는 단어가 linux 로 시작하는 경우에만 전체 파일에서 Linux 로 바꾼다.
오답 풀이
- 1번: "^linux" 의 ^ 는 "줄의 시작"을 의미하므로, 줄 맨 앞의 linux 만 바꾸어 "단어 시작" 조건과 다르다.
- 2번: "<linux" 는 단어 시작 경계 + linux 로, 단어가 linux 로 시작할 때만 치환하므로 옳다.
- 3번: "s/Linux/^linux/g" 는 Linux 를 찾아 "^linux" 문자열로 바꾸는 것이라 방향과 의미가 모두 반대다.
- 4번: "s/Linux/<linux/g" 도 치환 대상·결과가 뒤바뀌어 의도와 맞지 않는다.
보충 개념 정규식 단어 경계: <(단어 시작), >(단어 끝). 줄 경계 ^(줄 시작)·$(줄 끝)과 구분해야 한다. :%s/패턴/대체/g 는 전체 파일의 모든 일치를 치환한다.