본문 바로가기
C.W.K.
Stream
Lesson 05 of 10 · published

tr: 문자 단위 변환

~8 min · tr, character

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

문자 하나씩 다루는 가벼운 도구

tr은 줄이나 단어가 아니라 개별 문자를 대상으로 작동해. stdin을 읽어 문자를 바꾸거나 지운 뒤 stdout으로 내보내. 정규식이나 필드 개념 없이 두 문자 집합의 대응만 처리해.

네 가지 기본 동작

  • tr 'a-z' 'A-Z': 첫 문자 집합을 두 번째 집합에 일대일로 대응해.
  • tr -d 'aeiou': 지정한 모음을 모두 지워.
  • tr -s '\n': 연속된 줄바꿈을 하나로 줄여.
  • tr -c 'a-zA-Z' '_': 영문자에 속하지 않는 문자를 밑줄로 바꿔.

미리 정의된 문자 범주

[:upper:], [:lower:], [:digit:], [:space:], [:punct:] 같은 범주를 사용할 수 있어. tr -d '[:punct:]'는 구두점을 지우고, tr '[:upper:]' '[:lower:]'는 현재 로케일 규칙에 따라 대문자를 소문자로 바꿔.

문자열 치환에는 맞지 않아

tr 'foo' 'bar'는 단어 foo를 bar로 바꾸지 않아. 문자 위치에 따라 fb로, o를 뒤쪽 문자에 대응할 뿐이야. 문자열이나 정규식 단위의 치환은 sed나 프로그래밍 언어의 텍스트 API를 사용해.

자주 쓰는 예

  • Windows 줄바꿈의 CR 제거: tr -d '\r' < in.txt > out.txt
  • 탭을 공백으로 변경: tr '\t' ' '
  • 영문자를 대문자로 변경: echo 'hello' | tr a-z A-Z
  • 연속 공백을 하나로 축소: tr -s '[:space:]' ' '

바이트 정리와 Unicode 처리를 나눠

CR처럼 범위가 분명한 ASCII 바이트를 제거할 때는 tr이 단순해. 하지만 한글, emoji, 결합 문자는 여러 바이트나 코드 포인트로 표현될 수 있으므로 Unicode를 이해하는 도구로 처리해야 해. 화면에 한 글자로 보인다는 사실만으로 tr의 문자 한 칸과 같다고 가정하지 마.

모든 공백을 줄이기 전에 구조를 확인해

tr -s '[:space:]' ' '는 줄바꿈과 탭도 공백으로 바꿔 레코드 경계를 없앨 수 있어. 줄 구조를 버려도 되는 입력인지 먼저 정하고, 원본을 보존한 채 결과를 검증해.

Code

흔한 한 줄 명령·bash
# 소문자로 바꿔 단어 빈도 계산
tr 'A-Z' 'a-z' < article.txt \
  | tr -cs 'a-z' '\n'        \  # 단어마다 한 줄로 분리
  | sort | uniq -c | sort -rn | head

External links

Exercise

CRLF가 든 시험 파일에서 tr -d '\r'로 CR을 제거한 결과를 새 파일에 저장해. 작은 텍스트를 소문자로 바꾸는 예제와 단어 빈도 파이프라인도 실행하되, 각 단계가 어떤 문자를 구분자로 바꾸는지 중간 출력을 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.