ioerror

tr 사용법 및 옵션 - 문자열 변환 및 삭제 처리 본문

OS

tr 사용법 및 옵션 - 문자열 변환 및 삭제 처리

반응형

tr - Translate or Delete Characters

tr - Translate or Delete Characters

표준 입력(stdin)으로 전달받은 문자열에서 특정 문자를 다른 문자로 치환하거나 삭제, 압축하는 CLI 기반의 텍스트 처리 도구이다. 파일명을 지정하여 직접 읽는 기능이 없으므로 파이프(|)나 리디렉션(<)과 함께 사용된다. 데이터 정제, 대소문자 변환, 불필요한 공백 제거 등 쉘 스크립트 작성 시 필수적으로 활용된다. 모든 유닉스 및 리눅스 계열 OS의 기본 쉘 환경에 포함되어 있다.

1. tr 용도

  • 텍스트 데이터의 대문자/소문자 일괄 변환
  • 개행 문자(\n)나 탭 문자를 공백 또는 다른 구분자로 치환
  • 연속으로 중복 출력되는 공백이나 문자를 하나로 압축
  • 텍스트 파일에서 알파벳, 숫자, 특수 문자 등 특정 캐릭터 세트만 삭제하거나 남김
  • CSV, 로그 파일 등 데이터 파이프라인 처리 시 구분자 변경

2. tr 서식

Bash
 
tr [옵션] SET1 [SET2]

3. tr 옵션

옵션 설명 사용가능 OS 및 쉘
-d, --delete SET1에 해당하는 문자를 삭제 All
-s, --squeeze-repeats SET1에 해당하는 연속된 중복 문자를 단일 문자로 압축 All
-c, -C, --complement SET1의 보집합(SET1에 포함되지 않는 모든 문자)을 대상으로 지정 All
-t, --truncate-set1 SET1의 길이를 SET2의 길이에 맞게 강제로 잘라냄 [Linux]

명령어 옵션 사용 예시

Bash
 
# 1. 소문자를 대문자로 변환 (POSIX 문자 클래스 활용)
echo "hello world" | tr '[:lower:]' '[:upper:]'
# HELLO WORLD

# 2. 특정 문자(숫자) 일괄 삭제 (-d)
echo "User ID: 20260731" | tr -d '[:digit:]'
# User ID: 

# 3. 연속된 공백을 단일 공백으로 압축 (-s)
echo "Linux    Kernel   6.8" | tr -s ' '
# Linux Kernel 6.8

# 4. 알파벳과 개행을 제외한 모든 문자(보집합) 삭제 (-dc)
echo "Price: $150.00!" | tr -dc '[:alnum:]\n'
# Price150000

# 5. 개행 문자를 공백으로 변경하여 한 줄로 출력
cat << 'EOF' | tr '\n' ' '
line1
line2
line3
EOF
# line1 line2 line3 

4. tr 특이사항(유의사항)

  • 파일 직접 처리 불가: tr file.txt와 같이 파일명을 인자로 직접 전달하면 오류가 발생한다. 반드시 tr 'a' 'b' < file.txt 형태의 리디렉션이나 cat file.txt | tr 'a' 'b' 형태의 파이프를 사용해야 한다.
  • 문자 일대일 대응 구조: tr "abc" "xyz"는 단어 "abc"를 "xyz"로 바꾸는 것이 아니라 'a'->'x', 'b'->'y', 'c'->'z'로 개별 문자 단위 치환을 수행한다. 단어 단위 치환이 필요한 경우 sed를 사용해야 한다.
  • SET1과 SET2의 길이 불일치: GNU tr에서는 SET2가 SET1보다 짧으면 SET2의 마지막 문자를 SET1의 남은 문자들과 반복 매핑한다. 반면 BSD 계열(macOS)에서는 동작 방식이 다를 수 있으므로 표준 POSIX 문자 클래스([:upper:] 등)를 사용하는 것이 안전하다.
  • 다국어(UTF-8) 처리 제약: 기본 tr 명령어는 바이트 단위로 문자를 처리하므로 멀티바이트 한글 문자 치환 시 글자가 깨질 수 있다. 한글 데이터 정제에는 sed나 awk 활용이 권장된다.

관련 명령어들

  • sed: 스트림 에디터로, 단순 문자 치환을 넘어 정규표현식 기반의 단어/행 단위 편집 제공
  • awk: 필드 및 패턴 기반 텍스트 처리 전문 프로그래밍 언어
  • cut: 각 행에서 특정 필드나 바이트/문자 영역을 추출하는 명령어
  • wc: 텍스트의 행, 단어, 바이트 수를 측정하는 명령어

https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference

 

UNIX & Linux Command Reference

유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하

ioerror.tistory.com

 

 

 

반응형
Comments