반응형
리눅스 서버에서 수만 줄의 로그나 설정 파일을 열지 않고도, CLI 환경에서 즉시 데이터를 추출하거나 수정할 수 있는 필수 명령어 3가지입니다.
sed(Stream Editor)
vi와 같은 편집기를 열지 않고 텍스트를 수정(Substitution), 치환, 삭제할 때 사용합니다.
주로 설정 파일의 내용을 스크립트로 자동 변경하거나, 개인정보(IP, 주민번호) 마스킹 처리에 활용됩니다.
기본문법sed s/찾을문자/바꿀문자/g 파일명
# 1. (테스트) 화면에만 출력해보기 (원본 안 바뀜)
sed 's/True/False/g' config.conf
# 2. (실전) 원본 파일 내용을 덮어쓰기 (자동화 스크립트용)
sed -i 's/True/False/g' config.conf
(주의) 기본적으로는 화면에만 결과를 출력합니다. 원본 파일을 덮어쓰려면 -i (In-place) 옵션이 필수입니다.
awk(Aho, Weinberger, Kernighan)
텍스트를 '열(Column)' 단위로 쪼개서 데이터를 추출하고, 조건문을 걸어 통계를 낼 때 씁니다.
기본적으로 공백(스페이스, 탭)을 기준으로 열을 나눕니다. 엑셀의 '텍스트 나누기' 기능과 같습니다.
기본 문법awk '{print $숫자} 파일명(여기서 숫자는 N번째 열)
# 1. 단순 추출: access.log에서 IP($1)와 상태코드($9)만 출력
awk '{print $1, $9}' access.log
# 2. 조건 필터링: 상태 코드가 '500'(서버 에러)인 줄의 IP만 뽑아라
awk '$9 == 500 {print $1}' access.log
sed, awk 왜 쓰는가?
파이썬(Python)은 강력하지만, DevOps 현장에서는 다음과 같은 이유로 sed, awk가 더 유리할 때가 많습니다.
- 속도 & 간편함: 파일 열기/읽기/쓰기 코드를 짤 필요 없이 단 한 줄(One-liner)로 끝납니다.
- 범용성: 파이썬이 설치되지 않은 레거시 서버나, 초경량 컨테이너 환경에서도 리눅스만 깔려있다면 100% 동작합니다.
- 파이프라인(|) 연결: 다른 명령어의 결과를 바로 받아 처리하기 좋습니다.
DevOps 활용 예시
# [배포 자동화] deployment.yaml 파일의 버전 태그를 v1.0 -> v2.0으로 즉시 변경
sed -i 's/v1.0/v2.0/g' deployment.yaml
# [장애 대응] 에러 난 파드(Pod)만 골라서 자동 삭제 (Kill)
# 조회 -> 'Error' 검색 -> 파드 이름($1)만 추출 -> 삭제 명령어로 전달
kubectl get pods -A | grep Error | awk '{print $1}' | xargs kubectl delete pod
jq(JSON Processor)
최신 클라우드/DevOps 환경(AWS, Kubernetes, Terraform)의 표준 데이터 형식인 JSON을 다루는 필수 도구입니다. sed와 awk는 구조화된 JSON 데이터 처리에 취약하므로, jq가 반드시 필요합니다.
기본 문법명령어 | jq '.키이름'
# [가독성] 복잡한 JSON 결과를 예쁘게 정렬해서 보기 (Pretty Print)
aws ec2 describe-instances | jq .
# [데이터 추출] AWS 인스턴스 목록에서 'InstanceId' 값만 쏙 뽑아내기
aws ec2 describe-instances | jq '.Reservations[].Instances[].InstanceId'
실습 사이트
jq 연습: jqplay.org (강력 추천)
- 왼쪽에 JSON 데이터를 넣고, 상단에 명령어를 입력하면 오른쪽에 결과가 바로 나옵니다.
- 학습법: 구글에 "AWS json sample" 검색해서 넣고, 원하는 값만 뽑아보는 연습을 하세요.
sed/awk 연습: HackerRank - Linux Shell
- 해커랭크 사이트의 'Shell' 파트에 가시면
Grep, Sed, Awk문제들이 단계별로 있습니다. - 초반 5문제 정도만 풀어봐도 감이 옵니다.
반응형
'CS > OS,Linux' 카테고리의 다른 글
| SuperPutty로 여러대의 가상머신 접속하기 (3) | 2024.10.01 |
|---|---|
| [Bandit] Level3 → Level4: ls(숨겨진 파일) (0) | 2024.09.16 |
| [Bandit] Level2 → Level3: cat(파일명에 공백) (1) | 2024.09.16 |
| [Bandit] Level1 → Level2: cat(파일명이 특수기호) (2) | 2024.09.16 |
| [Bandit] Level0 → Level1: ls와 cat (0) | 2024.09.16 |