텍스트를 줄 단위로 처리하는 작업은 개발 중에 자주 발생합니다. 내보낸 데이터 정리, 도메인 목록 중복 제거, 로그 항목 정렬, 스택 트레이스 순서 뒤집기 등이 대표적입니다. 터미널에서는 sort, uniq, awk가 잘 작동하지만, 터미널 없이 브라우저에서 처리하고 싶을 때는 온라인 줄 도구가 가장 빠른 방법입니다.
주요 줄 작업
알파벳순 정렬
목록 정렬은 가장 흔한 텍스트 조작 작업 중 하나입니다. 활용 사례:
- 코드 리뷰 전에 import나 의존성 목록 정규화
.gitignore나hosts파일을 가독성 있게 정렬- 단어 목록이나 용어집 알파벳 순서로 정리
.env파일의 환경 변수 이름 정렬
동등한 셸 명령어:
sort input.txt
대소문자 구분 없는 정렬:
sort -f input.txt
역순 정렬:
sort -r input.txt
중복 줄 제거
두 목록을 병합하거나, 로그에 추가하거나, 여러 소스에서 내보내면 중복 줄이 자연스럽게 쌓입니다. 중복 제거는 데이터 정리의 첫 번째 단계입니다.
셸 동등 명령어(awk로 순서 보존):
# 인접한 중복만 제거 (정렬된 입력 필요)
sort input.txt | uniq
# 모든 중복 제거, 첫 번째 발생 보존 (순서 보존)
awk '!seen[$0]++' input.txt
awk 버전은 정렬 단계 없이 첫 번째 발생 순서를 보존하므로 실용적으로 더 유용합니다.
줄 순서 반전
줄 순서 반전은 시간순 로그에서 최신 항목을 맨 위에 보고 싶을 때, 또는 스택 트레이스를 아래에서 위로 읽고 싶을 때 유용합니다.
# macOS
tail -r input.txt
# Linux
tac input.txt
빈 줄 제거
PDF, HTML, CSV에서 텍스트를 추출하면 빈 줄이 자주 나타납니다. 제거하면 더 깔끔한 작업 세트를 얻을 수 있습니다.
grep -v '^$' input.txt
sed 사용 시:
sed '/^[[:space:]]*$/d' input.txt
앞뒤 공백 제거
목록에서 선행·후행 공백은 숨겨진 문제를 일으킵니다. 동일해 보이는 두 항목이 조인, 중복 제거, 조회에서 일치하지 않을 수 있습니다.
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' input.txt
실제 개발 사용 사례
의존성 목록 중복 제거
여러 기여자의 requirements를 병합한 후 중복은 흔합니다:
Before:
requests==2.31.0
numpy==1.26.0
requests==2.31.0
pandas==2.1.0
numpy==1.26.0
After deduplication:
requests==2.31.0
numpy==1.26.0
pandas==2.1.0
hosts 파일 항목 정렬
수천 개의 항목이 있는 hosts 파일이나 DNS 차단 목록은 정렬되어 있으면 유지 관리가 쉽습니다:
0.0.0.0 ads.example.com
0.0.0.0 analytics.example.com
0.0.0.0 tracking.example.com
정렬된 항목은 중복을 발견하고 특정 도메인을 찾기 쉽게 합니다.
로그 내보내기 정리
Datadog, Grafana Loki, Splunk에서 로그를 내보내 텍스트 에디터에 붙여넣으면 시간 창 겹침으로 인한 중복 줄이나 여분의 빈 줄이 생길 수 있습니다. 중복 제거 + 빈 줄 제거로 깔끔한 작업 세트를 얻을 수 있습니다.
API 테스트 데이터 정규화
시간이 지나면서 쌓인 테스트 ID나 테스트 엔드포인트 목록은 중복과 불규칙한 순서를 가지기 쉽습니다. 버전 관리에 체크인하기 전에 정렬 + 중복 제거로 팀 전체에 일관성을 유지할 수 있습니다.
클립보드 데이터 처리
스프레드시트 열, DB 쿼리 결과의 ID 목록, PDF에서 복사한 텍스트 블록을 처리할 때 원시 붙여넣기에는 보통 다음이 필요합니다:
- 공백 제거 (열 값에 패딩이 있을 수 있음)
- 빈 줄 제거 (선택 영역의 빈 행)
- 중복 제거 (피벗 테이블이 값을 반복할 수 있음)
- 정렬 (가독성이나 비교를 위해)
커맨드라인 레퍼런스
터미널을 선호하는 분들을 위한 줄 작업 참조표:
| 작업 | 명령어 |
|---|---|
| 알파벳순 정렬 | sort file.txt |
| 대소문자 구분 없는 정렬 | sort -f file.txt |
| 역순 정렬 | sort -r file.txt |
| 숫자 정렬 | sort -n file.txt |
| 인접한 중복 제거 | sort file.txt | uniq |
| 모든 중복 제거 (순서 보존) | awk '!seen[$0]++' file.txt |
| 중복 카운트 | sort file.txt | uniq -c | sort -rn |
| 줄 순서 반전 | tac file.txt (Linux) / tail -r file.txt (macOS) |
| 빈 줄 제거 | grep -v '^$' file.txt |
| 공백 제거 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' file.txt |
| 줄 수 카운트 | wc -l file.txt |
브라우저 도구 vs 터미널: 언제 무엇을 쓸까
터미널은 대용량 파일과 자동화에 강합니다. 브라우저 도구가 유리한 경우:
- 터미널을 사용할 수 없는 환경 (WSL 없는 Windows, 원격 데스크탑)
- 데이터가 브라우저 컨텍스트에서 왔을 때 (웹 페이지 복사, 폼 출력, API 응답)
- 터미널 창을 열지 않고 빠르게 일회성 작업을 하고 싶을 때
- 기술적이지 않은 팀원이 같은 작업을 해야 할 때
같은 데이터 파이프라인에서 반복 작업은 스크립트로 만드세요. 일회성 정리는 브라우저 도구에 붙여넣고 끝내는 것이 효율적입니다.
코드로 줄 처리하기
JavaScript
const text = `apple\nbanana\napple\ncherry\nbanana`;
const lines = text.split('\n');
const sorted = [...lines].sort();
const unique = [...new Set(lines)];
const reversed = [...lines].reverse();
const noBlank = lines.filter(line => line.trim() !== '');
Python
text = "apple\nbanana\napple\ncherry\nbanana"
lines = text.splitlines()
sorted_lines = sorted(lines)
unique_lines = list(dict.fromkeys(lines)) # preserves order
reversed_lines = list(reversed(lines))
no_blank = [l for l in lines if l.strip()]
Go
lines := strings.Split(text, "\n")
// Sort
sort.Strings(lines)
// Deduplicate (preserving order)
seen := make(map[string]bool)
unique := []string{}
for _, line := range lines {
if !seen[line] {
seen[line] = true
unique = append(unique, line)
}
}
터미널 없이 텍스트 줄 정리
브라우저에서 빠르게 텍스트 줄 작업을 하려면:
줄 도구 열기 → — 텍스트를 붙여넣고 정렬·중복 제거·반전·트림을 선택한 후 결과를 복사하세요.