공공부하자개발 · 영어 학습 노트
리눅스
리눅스 운영RHEL 에서 배포·운영하기0/13 완료
  • 01셸 기본과 파일 시스템
  • 02텍스트 처리 (grep·sed·awk)
  • 03프로세스·서비스 관리 (systemd)
  • 04자바 애플리케이션 배포
  • 05Tomcat·nginx 배포·재기동
  • 06로그·디스크 운영 (logrotate·cron)
  • 07네트워크 진단 (ss·curl·firewalld)
  • 08셸 스크립트 (운영 자동화)
  • 09장애 대응 (jstack·jmap·OOM killer·FD)
  • 10보안 기초 (ssh 강화·SELinux·감사 로그)
  • 11컨테이너 기초 (podman)
  • 12백업·복구 (설정·릴리스·DB 덤프)
  • 13Docker 실무
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 리눅스 운영 › 02 / 13

텍스트 처리 (grep·sed·awk)

섹션 7진행 0 / 13
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

5. 자주 하는 실수 (Tip)

❌ 실수 1: sed -i 를 백업 없이 운영 설정에 바로 쓴다

패턴이 의도보다 넓게 걸리면 여러 줄이 한꺼번에 바뀌고, 원본이 없어 되돌릴 수 없습니다. ✅ 항상 -i.bak 으로 원본을 남기고, 먼저 -i 없이 화면으로 결과를 확인한 뒤 적용합니다.

bash
sed 's/^server.port=.*/server.port=9090/' app.properties | diff app.properties -   # 미리 보기
sed -i.bak 's/^server.port=.*/server.port=9090/' app.properties                    # 확인 후 적용

❌ 실수 2: grep 에 | 를 쓰고 -E 를 빼먹는다

grep 'ERROR|WARN' 은 ERROR|WARN 이라는 글자 그대로를 찾아 아무것도 안 나옵니다. ✅ -E 를 붙이거나 egrep 을 씁니다. +, ?, {n} 도 같은 규칙입니다.

❌ 실수 3: uniq -c 앞에 sort 를 빼먹는다

uniq 는 바로 옆 줄끼리만 비교합니다. 흩어진 같은 값은 따로 세어져 결과가 틀립니다. ✅ sort | uniq -c 는 항상 짝으로 씁니다.

❌ 실수 4: awk 에서 숫자를 문자열로 비교한다

45ms 같은 값을 그대로 > 로 비교하면 사전순 비교가 되어 8 이 3001 보다 큽니다. ✅ $NF+0 처럼 +0 을 붙여 숫자로 바꿉니다. 단위 문자가 있어도 앞 숫자만 취합니다.

❌ 실수 5: grep 결과를 cat 으로 먼저 읽는다

cat app.log | grep ERROR 는 프로세스가 하나 더 뜨고 파이프 한 번을 더 거칩니다. ✅ grep ERROR app.log 로 파일을 직접 줍니다. 수 GB 로그에서는 속도 차이가 체감됩니다.

❌ 실수 6: 셸 변수를 작은따옴표 안에 넣는다

grep '$LEVEL' app.log 는 $LEVEL 글자 자체를 찾습니다. 작은따옴표 안에서는 변수가 펼쳐지지 않습니다. ✅ grep "$LEVEL" app.log 처럼 큰따옴표를 씁니다.

bash
LEVEL=ERROR
grep '$LEVEL' app.log        # 0줄, 글자 $LEVEL 을 찾음
grep "$LEVEL" app.log        # ERROR 줄 출력

❌ 실수 7: 점을 이스케이프하지 않는다

grep 'app.log' 의 . 은 아무 글자 하나를 뜻해 appXlog 도 걸립니다. 반대로 IP 주소 10.0.0.1 을 찾을 때 10.0.0.1 이 10x0y0z1 도 잡습니다. ✅ 글자로서의 점은 \. 로 쓰거나 grep -F 로 고정 문자열 검색을 씁니다.

❌ 실수 8: sed 치환에 / 가 든 값을 넣고 이스케이프를 놓친다

sed 's//opt/old//opt/new/' 는 구분자가 뒤섞여 에러가 납니다. ✅ 구분자를 # 나 | 로 바꿉니다. sed 's#/opt/old#/opt/new#' 가 읽기도 쉽습니다.

❌ 실수 9: tail -f | grep 이 아무것도 안 보인다고 판단한다

파이프 뒤 grep 은 출력을 버퍼에 모으므로 화면이 한동안 비어 있습니다. 에러가 안 나는 게 아니라 아직 안 찍힌 것입니다. ✅ grep --line-buffered 를 붙이거나 awk 라면 fflush() 를 씁니다.

❌ 실수 10: xargs 에 공백 있는 파일명을 넘긴다

ls | xargs rm 은 my file.log 를 my 와 file.log 두 개로 쪼개 엉뚱한 파일을 지웁니다. ✅ find -print0 | xargs -0 짝을 쓰거나 find -exec 를 씁니다.

bash
find . -name '*.log' -print0 | xargs -0 grep -c ERROR   # 공백 안전
find . -name '*.log' -exec grep -c ERROR {} +           # 같은 결과
자주 하는 실수 (Tip)
  • ❌ 실수 1: sed -i 를 백업 없이 운영 설정에 바로 쓴다
  • ❌ 실수 2: grep 에 | 를 쓰고 -E 를 빼먹는다
  • ❌ 실수 3: uniq -c 앞에 sort 를 빼먹는다
  • ❌ 실수 4: awk 에서 숫자를 문자열로 비교한다
  • ❌ 실수 5: grep 결과를 cat 으로 먼저 읽는다
  • ❌ 실수 6: 셸 변수를 작은따옴표 안에 넣는다
  • ❌ 실수 7: 점을 이스케이프하지 않는다
  • ❌ 실수 8: sed 치환에 / 가 든 값을 넣고 이스케이프를 놓친다
  • ❌ 실수 9: tail -f | grep 이 아무것도 안 보인다고 판단한다
  • ❌ 실수 10: xargs 에 공백 있는 파일명을 넘긴다
이전 섹션4 응용 변형 예제5 / 7다음 섹션6 연습 문제