우분투 실전 명령어 | tr로 대소문자·공백·개행 정리
텍스트 로그를 빠르게 정제할 때 tr 하나만으로 대소문자 변환, 공백 정리, 불필요 문자 제거까지 한 번에 처리할 수 있습니다. 특히 grep/awk 전에 입력 데이터를 정리해 두면 분석 속도와 정확도가 확실히 좋아집니다.
언제 쓰는가
로그 포맷이 들쑥날쑥해서 검색이 잘 안 될 때 먼저 tr로 문자열을 표준화하면 작업이 훨씬 쉬워집니다. 예를 들어 대소문자가 섞인 상태 코드, 탭/공백이 섞인 구분자, 제어문자가 포함된 파일을 빠르게 정리할 때 가장 유용합니다.
바로 쓰는 명령어
# 1) 대문자를 소문자로 통일
cat app.log | tr 'A-Z' 'a-z' > app.lower.log
# 2) 숫자/영문/줄바꿈만 남기고 특수문자 제거
cat raw.txt | tr -cd 'a-zA-Z0-9\n' > cleaned.txt
# 3) 연속 공백을 한 칸으로 축약
cat report.txt | tr -s ' ' > report.compact.txt
# 탭을 공백으로 통일 후 다중 공백 축약
cat mixed.tsv | tr '\t' ' ' | tr -s ' ' > normalized.txt
# CRLF 파일의 CR 제거 (윈도우 개행 정리)
cat windows.txt | tr -d '\r' > unix.txt
핵심 옵션/패턴
tr 'A-Z' 'a-z': 영문 대소문자 일괄 변환tr -d '문자셋': 지정한 문자 삭제tr -s '문자셋': 반복 문자를 1개로 축약tr -cd '문자셋': 문자셋에 포함된 것만 남기고 나머지 제거- 파이프라인 초반에
tr를 배치하면 뒤 단계(grep,awk,sort)가 안정적으로 동작합니다.
명령 출력 예시
$ printf 'ERROR User\tLogin FAIL\n' | tr 'A-Z' 'a-z'
error user login fail
$ printf 'a@@b##c!!\n' | tr -cd 'a-z\n'
abc
$ printf 'cpu usage high\n' | tr -s ' '
cpu usage high
$ printf 'line1\r\nline2\r\n' | tr -d '\r'
line1
line2
자주 하는 실수
- 유니코드/한글까지
tr로 완벽 변환된다고 기대하는 경우가 있습니다.tr는 바이트 단위 처리라 다국어 정규화는iconv,sed,awk조합이 더 안전합니다. tr -cd를 과하게 써서 필요한 구분자까지 같이 삭제하는 실수가 잦습니다. 먼저 샘플 10줄로 결과를 확인한 뒤 전체 파일에 적용하세요.- 원본 파일을 바로 덮어써 복구가 어려워지는 경우가 있습니다. 항상 출력 파일을 분리해 두는 게 안전합니다.
검증 방법
# 1) 전/후 라인 수 비교 (의도치 않은 줄 손실 확인)
wc -l raw.txt cleaned.txt
# 2) 제거 대상 문자가 실제로 사라졌는지 확인
grep -n $'\r' unix.txt
# 3) 공백 정리 결과 샘플 확인
head -n 5 report.txt
head -n 5 report.compact.txt
운영 팁
운영 로그 정제는 한 번에 끝내려 하지 말고, 샘플 -> 규칙 확정 -> 전체 적용 순서로 진행하는 게 가장 안전합니다. 특히 tr -cd 같은 필터링 명령은 보수적으로 시작하고, 필요한 문자셋을 조금씩 넓혀 가는 방식이 장애를 줄입니다.
출처
Ubuntu Manpage
GNU Coreutils Manual