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

cut과 tr

~10 min · cut, tr, fields

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

cut으로 구분된 필드 고르기

cut은 구분자가 일정한 입력에서 필요한 필드나 글자 범위를 뽑아. 필드, 구분자와 글자 위치를 다음처럼 지정할 수 있어.

  • cut -f 2는 탭으로 나눈 두 번째 필드를 골라.
  • cut -d ',' -f 1,3은 쉼표로 나눈 첫 번째와 세 번째 필드를 골라.
  • cut -c 1-10은 각 줄의 처음 10글자를 잘라 내.
  • cut -d ' ' -f 2-는 공백으로 나눈 두 번째 필드부터 끝까지 출력해.

단순한 TSV나 고정 구분자 로그에는 잘 맞지만, 따옴표와 이스케이프 규칙이 있는 입력은 다음 트랙의 awk나 전용 파서를 써야 해.

tr로 문자를 바꾸거나 지우기

tr는 표준 입력을 글자 단위로 읽어서 바꾸거나 지워. 자주 쓰는 형태는 다음과 같아.

  • tr 'a-z' 'A-Z'는 소문자를 대문자로 바꿔.
  • tr -d ' '는 공백을 지워.
  • tr -s ' '는 이어지는 공백을 하나로 줄여.
  • tr -c 'a-zA-Z0-9' '_'는 영숫자가 아닌 글자를 모두 밑줄로 바꿔.

실제 조합 예시

  • cut -d ' ' -f 1 access.log | sort -u로 로그의 고유 IP를 모을 수 있어.
  • tr 'A-Z' 'a-z' < INPUT > output은 입력을 소문자로 바꿔 저장해.
  • tr -d '\r' < in.txt > out.txt은 Windows식 줄바꿈의 CR을 제거해.
  • tr '\t' ' '은 탭을 공백으로 바꿔.

cut의 한계

cut은 따옴표 안의 쉼표를 이해하지 못해. 정식 CSV는 csvkit, miller나 Python의 csv 모듈로 처리하고, cut은 구분 규칙이 단순한 로그에 사용해.

구분자가 데이터 안에 들어오면 cut은 멈춰

cut -d,는 CSV의 따옴표와 내장된 comma를 이해하지 않아. 단순한 colon-separated 설정에는 적합하지만 정식 CSV와 escape 규칙이 있는 형식은 파서를 써. 글자 하나를 구분자라고 부른다고 구조가 생기지는 않아.

tr은 바이트와 로케일 경계에 민감해

문자 집합과 range 의미는 로케일에 따라 달라질 수 있고 multi-바이트 텍스트를 원하는 대로 처리하지 못할 수 있어. ASCII 정규화에는 가볍지만 Unicode 대소문자와 단어 변환에는 언어 런타임이나 전용 도구가 더 안전해.

Code

/etc/passwd에서 사용자 추출·bash
cut -d ':' -f 1 /etc/passwd | head
# 셸 명령과 조합
cut -d ':' -f 1,7 /etc/passwd | head
이름 필드 정규화·bash
echo '  John   Doe' \
  | tr -s ' '            \  # 연속 공백을 하나로 줄이기
  | tr 'A-Z' 'a-z'       \  # 소문자로 바꾸기
  | sed 's/^ //'         \  # 앞쪽 공백 제거
  | tr ' ' '-'              # 공백을 대시로 바꾸기

External links

Exercise

cut -d ':' -f 1 /etc/passwd | sort로 사용자 이름 필드를 정렬해. echo 'Hello World' | tr 'a-z' 'A-Z'로 문자 변환을 확인하고, tr -s ' '를 적용하기 전후의 공백이 어떻게 달라지는지도 작은 입력으로 비교해.

Progress

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

댓글 0

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

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