grep에서 한글을 검색할 때 LANG 환경변수 값을 바꿔줘야 하나요?
글쓴이: academic / 작성시간: 화, 2024/03/19 - 5:47오후
정규식 공부하다가 제 지식으로는 해결이 안되는 문제가 있어서 질문 드립니다.
/etc/passwd 파일을 검색하던 중이었습니다.
콜론(:) 중간에 '아무개'가 들어가 있는 문자열을 grep으로 검색하면 다음과 같이 잘 찾습니다.
$ echo ":아무개:" | grep ":.*:" :아무개:
그런데, 콜론 중간에 특정 한글 이름이 들어가 있는 문자열을 검색하면 찾지를 못합니다.
$ echo ":곽재혁:" | grep ":.*:"
grep man 페이지를 뒤지다가 locale 관련 언급이 있길래 export LANG=C 라고 지정한 다음에 검색하면 제대로 나오더군요.
$ export LANG=C $ echo ":곽재혁:" | grep ":.*:" :곽재혁:
원래 값은 LANG=ko_KR.utf8 이었습니다. 이 값을 C.utf8, en_US.utf8로 바꿔봐도 제대로 검색되지 않았고요.
GNU 툴에서 한글을 정규식으로 검색할 때 무조건 locale을 C로 바꿔주고 해야할까요?
Forums:
음 ..
unicode 를 multibyte sequence 에 맞춰 grep 하시려면 -P 옵션을(PCRE) 쓰는 게 나을 겁니다.
본문과 같은 경우에는 LANG=C 와 같이 locale 을 C 로 바꿔 주는 것도 나쁘진 않은데, 이 경우에는 bytewise 로 grep 을 하기 때문에, grep 하려는 문자에 따라 의도와는 다른 결과가 나올 수도 있습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
친절하게 가르쳐 주셔서 감사합니다. 말씀해주신대로
친절하게 가르쳐 주셔서 감사합니다.
말씀해주신대로 PCRE로 하니까 원하는 결과가 나오네요. ^^
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
댓글 달기