06.OS/Linux

[문자열 검색] 문자열 찾기 방법

basicinfo119 2024. 11. 8. 08:29
728x90
반응형
  • 문자열을 찾는 방법에 대해 작성 합니다. 

Grep 을 사용한 문자열 찾기 

  • 아래 테스트 로그를 이용해 문자열을 찾는 방법을 알아본다 .
  • test.log 파일 내용
--- 0 Error in 17 cases - ._130_line_3729_case
--- 0 Warning in 18 cases - ._143_line_7455_case
--- 0 Error in 19 cases - ._147_line_7455_case
--- 0 fails in 17 cases - ._130_line_3729_case
--- 0 Warning in 18 cases - ._143_line_7455_case
--- 0 Info in 19 cases - ._147_line_7455_case
--- 0 Info in 19 cases - ._148_line_7455_case
--- 0 Info in 19 cases - ._149_line_7459_case
--- 0 Info in 19 cases - ._150_line_7459_case
--- 0 Info in 19 cases - ._151_line_7459_case
--- 0 Info in 19 cases - ._152_line_7459_case

 

대소문자 구분없이 문자열 라인 찾기

# test.log 파일 에서 Error 또는 Warning 문자를 포함한 라인을 출력 하는 예제이다.
grep -in -E "Error|Warning" test.log

 

 위 예제에서 사용한 옵션은 아래와 같다. 

  • -i: 대소문자 구분 없이 검색
  • -n: 라인 번호 출력
  • -E: 확장된 정규 표현식 사용 
  • "Error|Warning": Error 또는 Warning 을 의미하는 정규 표현식 (둘 중 하나가 포함된 라인을 찾음)
  • test.log: 검색할 파일명

찾은 문자열을 분리해서 특정 숫만 출력 하기 

  • 정규식 과 sed 사용 
grep -o 'line_[0-9]\+_case' test.log | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/g'
$ grep -o 'line_[0-9]\+_case' test.log | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/g'
3729
7455
7455
3729
7455
7455
7455
7459
7459
7459
7459

 

찾은 문자열을 중복 제거하고 정렬 하기 

  • 정규식 과 sed 사용 + sort (정렬) + uniq(중복 제거) 
grep -o 'line_[0-9]\+_case'  test.log  | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/g' | sort -n | uniq
$ grep -o 'line_[0-9]\+_case'  test.log  | sed 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/g' | sort -n | uniq
3729
7455
7459

 

 

Grep 옵션 

옵션설명예제

-r 하위 디렉토리까지 포함하여 검색 (재귀 검색) grep -r "error" /var/log
-i 대소문자 구분 없이 검색 grep -i "error" logfile.txt
-H 검색 결과에 파일명을 출력 grep -H "error" logfile.txt
-n 검색된 문자열의 행 번호를 출력 grep -n "error" logfile.txt
-c 해당 문자열이 포함된 라인의 개수 출력 grep -c "error" logfile.txt
-l 해당 문자열이 포함된 파일의 이름만 출력 grep -l "error" *.log
-v 특정 문자열이 포함되지 않은 라인 출력 (반대 검색) grep -v "debug" logfile.txt
-w 단어 단위로 검색 (부분 일치 방지) grep -w "error" logfile.txt

 

 

 

728x90
반응형