imhamburger 님의 블로그

리눅스(Linux) - 빔(Vim) 에디터 명령어 grep 실습 - 02 본문

리눅스(Linux)

리눅스(Linux) - 빔(Vim) 에디터 명령어 grep 실습 - 02

imhamburger 2024. 7. 9. 21:53

오늘은 데이터 엔지니어 부트캠프 2일차이다. 비전공자라 컴퓨터지식이 없어 그때그때 구글링하며 배우고 있다.

오늘은 1일차에 배웠던 빔 명령어에 관해 간단한 퀴즈를 풀었다.

 

문제

http 상태 코드는 아래와 같습니다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

서버에서 실시간 발생하는 500 로그를 확인하는 방법은 아래와 같습니다.

$ tail -f tmp/ls.log | grep 500

 

5xx 에 해당하는 모든 로그를 확인하는 grep 구문은 무엇인가요?

 

내가 이 문제를 처음 풀었던 답은 아래와 같다.

tail -f tmp/ls.log | grep '^5'

 

*여기서 tail -f 명령어는 실시간으로 내용을 출력하여 파일을 모니터링 할 수 있게 해준다. tail -f {파일명}

 

처음 이 문제를 받았을 때는 5xx 이니까 맨 앞에 5만 오면 되는거 아닌가? 라고 안일하게 생각했다.

그래서 저런 코드를 적었는데 틀.렸.다!

 

저렇게 코드를 적게되면,

500

512

5바보

5햄버거맛있다 

등등.. 뒤에 무엇이 오든지간에 출력된다.. 

 

tail -f tmp/ls.log | grep '5..' 

이 코드도 마찬가지인 이유로 틀렸다.

 

여기서 아차! 깨달은 건... 데이터는 정말 세세하게 정밀하게 작업해줘야 정확하게 뽑아낼 수 있다는 것!

 

정답은 여러가지가 될 수 있다. 여러가지 중 예시는 아래와 같다.

tail -f tmp/ls.log | grep -E '^5(0|1)[0-9]$'
tail -f tmp/ls.log | grep '5[0-9][0-9]'

이렇게 작성하면 5xx 인 것만 출력이 된다.

첫번째에서 -E는 정규표현식 확장형으로 저것을 적어주지 않으면 해당코드는 실행이 되지 않는다.

'^5(0|1)[0-9]$' 이걸 말로 풀면,

맨 앞에는 무조건 5로 시작하며 그 다음은 0과 1중 하나만 올 수 있으며 맨 끝은 무조건 0-9 사이의 숫자만 올 수 있다. 라는 뜻이다.

 

오늘의 교훈: 앞으로 코드를 짤 때에는 예외의 경우도 잘 생각해야겠다.

 

*끄적끄적

echo "메세지입력" > {파일명} #해당 파일에 문자열 입력, 해당 파일이 이미 있는 경우는 기존 내용을 덮어쓴다.
echo "메세지입력" >> {파일명} #해당 파일에 문자열 입력, 해당 파일이 이미 있는 경우는 기존 내용에 이어쓴다.
ls -l > {파일명} #ls -l 내용을 파일에 복사 입력한다.
mkdir -p a/b/c #mkdir 폴더를 만들어주는데 하나씩 만들어야 하지만 mkdir -p 를 붙이면 한꺼번에 만들 수 있다.