기본 문법
cut [옵션] [파일...]
cut은 텍스트의 각 줄을 일정한 기준으로 나눈 뒤 원하는 부분만 골라 출력하는 명령어입니다. 기준은 크게 세 가지로, 바이트 위치(-b), 문자 위치(-c), 구분자로 나눈 필드(-f)입니다. -b, -c, -f 중 하나는 반드시 지정해야 하며, 실무에서는 -d로 구분자를 지정하고 -f로 필드 번호를 고르는 방식을 자주 씁니다.
/etc/passwd처럼 콜론으로 구분된 설정 파일에서 사용자 이름만 뽑거나, CSV·로그처럼 구분자가 일정한 데이터에서 특정 열만 추출할 때 사용합니다. grep으로 줄을 걸러내고 cut으로 필요한 부분만 잘라낸 뒤 sort와 uniq으로 정리하는 파이프 조합이 전형적인 패턴입니다.
리눅스마스터·LPIC 등 자격 시험에서는 -d와 -f 조합, 필드 범위 표기(1-3, 2-, -3), awk와의 차이를 묻는 문제가 나옵니다. cut은 구분자가 한 글자로 고정되어 있고 필드 순서를 바꿀 수 없다는 점이 awk와의 핵심 차이입니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-d 구분자 | 필드를 나눌 구분 문자 지정(한 글자, 기본값은 탭) | cut -d: -f1 /etc/passwd |
-f 목록 | 출력할 필드 번호 지정(1부터 시작, 범위·쉼표 가능) | cut -d: -f1,3 /etc/passwd |
-c 목록 | 문자 위치 기준으로 잘라내기 | cut -c1-8 /etc/passwd |
-b 목록 | 바이트 위치 기준으로 잘라내기 | cut -b1-4 /tmp/demo/log.txt |
--complement | -b, -c, -f로 선택한 부분을 제외한 나머지를 출력 | cut -d: -f1 --complement /etc/passwd |
-s, --only-delimited | 구분자가 없는 줄은 출력하지 않음(-f와 함께 사용) | cut -d: -s -f1 /etc/passwd |
--output-delimiter=문자열 | 출력에 사용할 구분자를 따로 지정(두 글자 이상도 가능) | cut -d: -f1,3 --output-delimiter=' ' /etc/passwd |
실무 예시
passwd에서 사용자 이름만 추출
준비: mkdir -p /tmp/demo; head -5 /etc/passwd > /tmp/demo/passwd.txt
$ cut -d: -f1 /tmp/demo/passwd.txt
root
bin
daemon
adm
lp
콜론(:)을 구분자로 첫 번째 필드만 잘라내 사용자 이름 목록을 얻습니다.
여러 필드와 범위 지정
준비: mkdir -p /tmp/demo; printf 'root:x:0:0:root:/root:/bin/bash\nuser1:x:1000:1000::/home/user1:/bin/bash\n' > /tmp/demo/pw.txt
$ cut -d: -f1,3-4 /tmp/demo/pw.txt
root:0:0
user1:1000:1000
1번 필드와 3~4번 필드를 함께 출력합니다. 별도 지정이 없으면 출력 구분자는 입력 구분자와 같은 콜론입니다.
문자 위치로 잘라내기
준비: mkdir -p /tmp/demo; printf '2026-09-16 10:23:45 INFO start\n2026-09-17 11:02:07 WARN retry\n' > /tmp/demo/log.txt
$ cut -c1-10 /tmp/demo/log.txt
2026-09-16
2026-09-17
각 줄의 1~10번째 문자만 잘라 날짜 부분을 뽑습니다. 자리 폭이 고정된 로그에 사용합니다.
grep과 파이프로 실패한 로그인 사용자 추출
준비: mkdir -p /tmp/demo; printf 'Sep 16 FAILED login user=alice\nSep 16 OK login user=bob\nSep 17 FAILED login user=carol\nSep 17 FAILED login user=alice\n' > /tmp/demo/auth.log
$ grep FAILED /tmp/demo/auth.log | cut -d= -f2 | sort -u
alice
carol
FAILED가 들어간 줄만 걸러낸 뒤 = 뒤의 사용자 이름을 잘라 정렬하고 중복을 제거합니다. 130번 '실패한 로그인 시도 사용자 목록 만들기' 문제와 같은 패턴입니다.
CSV에서 열 추출 후 출력 구분자 변경
준비: mkdir -p /tmp/demo; printf 'id,name,dept\n101,kim,sales\n102,lee,dev\n' > /tmp/demo/emp.csv
$ cut -d, -f2,3 --output-delimiter=' | ' /tmp/demo/emp.csv
name | dept
kim | sales
lee | dev
쉼표로 나눈 2·3번 열을 뽑고 출력 구분자를 ' | '로 바꿉니다. 헤더 줄도 그대로 처리되므로 필요하면 tail -n +2로 제외합니다.
로그에서 request_id 값만 추출
준비: mkdir -p /tmp/demo; printf 'app INFO request_id=abc123 done\napp ERROR request_id=def456 fail\napp ERROR request_id=ghi789 timeout\n' > /tmp/demo/app.log
$ grep ERROR /tmp/demo/app.log | cut -d' ' -f3 | cut -d= -f2
def456
ghi789
공백으로 나눈 3번째 필드(request_id=값)를 먼저 뽑고, 다시 =를 구분자로 값만 남깁니다. 199번 '앱/시스템 로그 상관 request_id 매칭 추출' 문제에서 키를 모을 때 쓰는 방식입니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
주의할 점
- -b, -c, -f 중 하나는 반드시 지정해야 합니다. 아무것도 주지 않으면 사용법 오류가 납니다.
- -d의 구분자는 한 글자만 가능합니다. 공백 여러 개로 나뉜 컬럼은 cut으로 처리하기 어렵고 awk가 적합합니다.
- -f 순서를 바꿔 써도(-f3,1) 출력은 항상 원래 필드 순서대로 나옵니다. 순서 변경이 필요하면 awk를 쓰세요.
- -f 사용 시 구분자가 없는 줄은 기본적으로 줄 전체가 그대로 출력됩니다. 제외하려면 -s를 붙이세요.
- -c는 문자, -b는 바이트 기준입니다. 한글 등 멀티바이트 데이터에 -b를 쓰면 글자가 깨질 수 있으므로 -c를 사용하세요. GNU coreutils의 -n 옵션은 실제로는 동작에 영향을 주지 않습니다.
- --output-delimiter는 두 글자 이상 지정할 수 있지만, 입력 구분자(-d)는 여전히 한 글자만 가능합니다.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
