주요 텍스트 조작 명령어 소개
리눅스 환경에서는 대량의 텍스트 데이터를 효율적으로 처리하기 위한 강력한 명령어들이 제공됩니다. 특히 로그 분석, 구성 파일 수정, 스크립트 자동화 작업에서 다음과 같은 도구들이 자주 활용됩니다: sort, uniq, cut, comm, diff.
sort – 데이터 정렬
sort 명령은 입력된 텍스트를 기준에 따라 오름차순 또는 내림차순으로 정렬하여 표준 출력에 표시합니다. 원본 파일은 변경되지 않습니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
-r | 역순(내림차순)으로 정렬 |
-u | 중복된 라인 제거 (유일한 값만 출력) |
-f | 대소문자 구분 없이 정렬 |
-d | 사전식 정렬 (문자, 숫자, 공백만 고려) |
-c | 입력 파일이 정렬되어 있는지 검사 |
-m | 이미 정렬된 파일들을 병합 |
사용 예시
# cs.log 내용을 알파벳 순으로 정렬
$ sort cs.log
# 내림차순으로 정렬
$ sort -r cs.log
# 중복 제거 후 정렬
$ sort -u cs.log
uniq – 인접 중복 라인 제어
uniq는 연속된 중복 라인을 필터링합니다. 일반적으로 sort와 함께 사용하여 전체 중복을 제거합니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
-c | 각 라인 앞에 출현 횟수 출력 |
-d | 중복된 라인만 출력 |
-D | 모든 중복 라인을 그대로 출력 |
-u | 중복되지 않은 라인만 출력 |
-i | 대소문자 무시 |
-s N | 처음 N개 문자 생략 후 비교 |
-w N | 앞에서부터 N자까지만 비교 |
사용 예시
$ cat data.txt
apple
apple
banana
cherry
cherry
cherry
# 중복 제거 (연속된 경우)
$ uniq data.txt
apple
banana
cherry
# 유일한 라인만 출력
$ uniq -u data.txt
banana
# 각 라인의 반복 횟수 확인
$ uniq -c data.txt
2 apple
1 banana
3 cherry
cut – 특정 필드 추출
cut은 각 라인에서 지정된 바이트, 문자 또는 필드를 추출하는 데 사용됩니다. 특히 /etc/passwd와 같은 구분자 기반 파일 처리에 유용합니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
-b LIST | 지정된 바이트 위치 추출 |
-c LIST | 지정된 문자 위치 추출 |
-d DELIM | 기본 구분자(:, \t 등) 대신 사용할 문자 지정 |
-f LIST | 지정된 필드 번호 출력 (1부터 시작) |
-s | 구분자가 없는 라인은 출력하지 않음 |
사용 예시
# /etc/passwd에서 사용자 이름과 홈 디렉터리 추출 (필드 1과 6)
$ cut -d: -f1,6 /etc/passwd
root:/root
bin:/bin
daemon:/sbin
...
# 첫 번째 필드만 추출
$ cut -d: -f1 /etc/passwd | head -3
root
bin
daemon
comm – 정렬된 파일 비교
comm은 두 개의 **정렬된** 텍스트 파일을 라인 단위로 비교하고 세 가지 범주로 결과를 출력합니다:
- 1열: 첫 번째 파일에만 존재
- 2열: 두 번째 파일에만 존재
- 3열: 양쪽 모두 존재
제어 옵션
| 옵션 | 효과 |
|---|---|
-1 | 첫 번째 열(파일1 전용) 숨김 |
-2 | 두 번째 열(파일2 전용) 숨김 |
-3 | 세 번째 열(공통 라인) 숨김 |
사용 예시
$ echo -e "a\naa" > file1
$ echo -e "a\nbb" > file2
$ sort -o file1 file1
$ sort -o file2 file2
# 공통 라인만 출력
$ comm -12 file1 file2
a
# file1에만 있고 file2에는 없는 항목
$ comm -23 file1 file2
aa
diff – 파일 차이 분석
diff는 두 파일 간의 차이점을 상세히 보여주는 명령어로, 패치 생성이나 구성 관리에 널리 사용됩니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
-u | 통합 형식 출력 (git diff 등에서 사용) |
-c | 컨텍스트 형식 출력 |
-y | 측면 비교 (병렬 출력) |
-W N | 측면 비교 시 출력 너비 설정 |
-i | 대소문자 무시 |
-w | 모든 공백 무시 |
-B | 빈 줄 추가/삭제 무시 |
-q | 다른지 여부만 요약 출력 |
-s | 동일할 경우 메시지 출력 |
-r | 디렉터리 재귀 비교 |
-a | 모든 파일을 텍스트로 취급 |
사용 예시
$ diff file1 file2
2c2
< aa
---
> bb
# 통합 형식으로 비교
$ diff -u file1 file2
--- file1 2025-04-05 10:00:00.000000000 +0900
+++ file2 2025-04-05 10:00:05.000000000 +0900
@@ -1,2 +1,2 @@
a
-aa
+bb
# 두 파일이 동일한지 확인
$ diff -q original.txt backup.txt
Files original.txt and backup.txt are identical