문제
다음 중 vi 편집기에서 한 줄이 linux인 경우에만 전부 Linux로 치환하는 명령으로 알맞은 것은?
① :% s/^linux$/Linux/g ② :% s/linux/^Linux$/g ③ :% s/<linux>/Linux/g ④ :% s/linux/<Linux>/g
정답
1번
해설
정답: 1. "한 줄이 linux 인 경우에만" 은 줄의 시작(^)과 끝($) 사이에 linux 만 있는 줄을 뜻한다. 정규식 ^linux$ 로 그 줄 전체를 매칭해 ":% s/^linux$/Linux/g" 로 치환한다.
오답 풀이
- 1번: ^linux$ 로 'linux' 만 있는 줄을 정확히 골라 Linux 로 치환하므로 옳다.
- 2번: 치환 대상(앞쪽)이 단순 'linux' 이고, 정규식 앵커(^$)를 결과(뒤쪽)에 넣어 의미가 어긋난다.
- 3번: <linux> 는 단어 경계 매칭으로, 줄 어디에 있는 단어 'linux' 든 모두 치환해 '줄 전체가 linux' 조건과 다르다.
- 4번: 앵커·단어 경계 표기를 치환 결과 쪽에 잘못 넣어 동작이 어긋난다.
보충 개념 정규식 앵커: ^(줄 시작), $(줄 끝). ^단어$ 는 그 단어만 있는 줄을 매칭한다. <단어> 는 단어 경계 매칭으로 줄 안의 해당 단어를 찾는다(범위가 더 넓다).