sed·awk 기초
쉽게 말하면
sed는 글 파일 전체에 '찾아 바꾸기'를 한 번에 거는 도구이고, awk는 표처럼 생긴 글에서 원하는 칸만 뽑거나 계산하는 도구예요. 보통 원본은 그대로 두고 결과만 화면에 보여 줘요.
시험용 정의
sed(stream editor)는 입력을 한 줄씩 읽으며 치환·삭제·출력 같은 편집을 하는 비대화형 편집기다. awk는 줄을 칸(필드)으로 나눠 조건에 맞는 줄의 원하는 칸을 뽑고 계산하는 패턴 처리 언어다. 이름 awk는 만든 세 사람 Aho·Weinberger·Kernighan의 성 첫 글자다.
비유로 이해하기
sed는 문서 전체에 "찾아 바꾸기"를 거는 교정기, awk는 표에서 "영업부인 사람의 이름 칸만" 골라 적는 사무원이다.
시험에 이렇게 나와요
- sed 's/a/b/g' 파일(원본은 그대로, -i로 수정), sed -n '5p'
- awk -F: '{print $1}' /etc/passwd(필드 출력)
- sed s///g 결과 예측
- sed -i의 의미 (원본 수정)
- awk -F와 $N 출력 결과
- awk 이름 유래: 개발자 Aho, Weinberger, Kernighan
1차 출제기준 · 공개 기출 없음
확인 문제
Q1. sed 's/kim/KIM/' names.txt를 실행하면 원본 파일 names.txt는?
- 사본 names.txt.bak이 생긴다
- kim이 KIM으로 바뀌어 저장된다
- 삭제된다
- 바뀌지 않는다. 바뀐 결과가 화면에만 나온다
정답 보기
4번 바뀌지 않는다. 바뀐 결과가 화면에만 나온다
sed는 기본적으로 결과를 표준 출력으로만 내보내고 원본은 그대로 둔다. 파일 자체를 고치려면 -i(in-place) 옵션을 쓰거나 결과를 다른 파일로 리다이렉션한다.
Q2. 파일 전체의 cat을 dog로 모두 바꿔 원본을 수정하는 명령은?
- sed -i 's/cat/dog/g' f
- sed 's/cat/dog/' f
- sed -n 's/cat/dog/g' f
- sed 's/cat/dog/g' f
정답 보기
1번 sed -i 's/cat/dog/g' f
-i(원본 수정) + g(모두).
Q3. awk -F: '{print $1}' /etc/passwd의 결과는?
- 사용자 이름 목록
- 셸 목록
- UID 목록
- 홈 디렉터리 목록
정답 보기
1번 사용자 이름 목록
passwd의 1번째 칸 = 사용자 이름.
Q4. awk에서 현재 줄 번호를 뜻하는 변수는?
- FS
- NR
- NF
- $0
정답 보기
2번 NR
NR(Number of Record). NF는 칸 수.
헷갈리기 쉬운 O·X
sed는 옵션 없이 실행해도 원본 파일을 수정한다.
정답 보기
X 결과만 출력. 원본 수정은 -i.
awk에서 $0은 줄 전체를 뜻한다.
정답 보기
O 맞는 설명이다.
sed 's/a/b/'는 한 줄에 a가 여러 번 있으면 모두 바꾼다.
정답 보기
X g가 없으면 첫 번째만.