텍스트 처리 (grep·sed·awk)
6. 연습 문제
문제 1. 시간대별 에러 수
app.log 에서 ERROR 줄만 골라 시 단위(09, 10, ...) 로 몇 건인지 세는 명령을 쓰세요.
grep ERROR app.log | cut -c12-13 | sort | uniq -ccut -c12-13 은 2026-09-10 09:00:07 에서 시 두 자리를 자릅니다. awk '{print substr($2,1,2)}' 로도 같습니다.
문제 2. 설정 값 읽기
app.properties 에서 server.port 의 값만(숫자만) 출력하는 명령을 쓰세요.
grep '^server.port=' app.properties | cut -d= -f2awk -F= '/^server.port=/{print $2}' app.properties 도 정답입니다. ^ 를 빼면 management.server.port 까지 걸리므로 줄 첫머리를 고정합니다.
문제 3. 느린 요청 찾기
응답 시간이 1000ms 를 넘는 줄만 출력하는 awk 명령을 쓰세요. 응답 시간은 각 줄의 마지막 열에 45ms 형식입니다.
awk '/ms$/ && $NF+0 > 1000' app.log동작 블록을 생략하면 조건에 맞는 줄을 그대로 출력합니다. $NF+0 으로 숫자 변환을 잊지 않는 것이 핵심입니다.
문제 4. 로그 레벨 일괄 변경
/opt/myapp/conf 아래 모든 .properties 파일에서 logging.level.root=DEBUG 를 INFO 로 바꾸되 백업을 남기는 명령을 쓰세요.
grep -rl 'logging.level.root=DEBUG' /opt/myapp/conf --include='*.properties' \
| xargs sed -i.bak 's/^logging.level.root=DEBUG/logging.level.root=INFO/'grep -rl 로 대상 파일만 고르고 xargs 로 sed 에 넘깁니다. 대상이 없으면 sed 가 인자 없이 실행되므로 xargs -r 을 붙이면 안전합니다.
문제 5. 상위 예외 3종
app.log 에서 자바 예외 클래스 이름(java.lang.NullPointerException 형태) 별 발생 수를 세어 많은 순 3개만 출력하세요.
grep -oE '^[a-z]+(\.[a-zA-Z]+)+(Exception|Error)' app.log | sort | uniq -c | sort -rn | head -n 3-o 로 클래스 이름만 잘라내고 빈도 패턴 세 단계를 붙였습니다. ^ 가 있어 at ... 스택 줄이나 Caused by: 줄은 제외됩니다.