명령프롬프트(cmd)에서 find, findstr 사용법(특정단어찾기)
자체서비스 어플리케이션의 유지보수 업무를 하다보면 로그파일을 보게되는 일이 잦다.
개인적으로 데이터베이스와 로그파일을 비교하여 원하는 정보를 색출해내기 위한 find, findstr 명령어의 사용법을 정리해본다.
[선행작업]
1. 마우스 우클릭 > 관리자 권한으로 cmd 실행
2. 원하는 디렉터리로 이동 (cd /경로)
[참고] : 문자열이 깨지는 경우
방법 1 : 파일의 인코딩 변경
메모장으로 해당파일을 열고 > 다른이름으로 저장 > 저장방식을 UTF-8로 설정 > 저장
방법2 : cmd 콘솔창의 인코딩 방식 변경 <- 추천
* cmd 콘솔창에서 아래 문구 입력
- 인코딩 방식을 ANSI로 원할 경우 : chcp 949
- 인코딩 방식을 UTF-8로 원할 경우 : chcp 65001
[파일명찾기. 제목찾기]
특정 문자열이 존재하는 행 찾기
dir /s /b | find /i "원하는문자열입력"
-> C:\Users\TY\Desktop\log repository>dir /s /b | find /i "원하는문자열입력"
C:\Users\TY\Desktop\log repository\a\원하는문자열입력.txt
dir /s /b | find /i "원하는문자열입력"
-> 해당사항없음
dir /s | find "원하는문자열입력"
-> C:\Users\TY\Desktop\log repository>dir /s | find "원하는문자열입력"
2019-05-20 오전 11:03 3 원하는문자열입력.txt
dir /s | find "원하는문자열입력"
-> 해당사항없음
[파일내용찾기. 원하는문자열찾기]
findstr /s "원하는문자열입력" *.txt
-> C:\Users\TY\Desktop\log repository>findstr /s "원하는문자열입력" *.txt
a\zzz.txt:123
findstr /s "원하는문자열입력" *.*
-> /s가 하위경로까지 찾으므로 매우많이나옴. 특정 경로에 들어가서 입력 시 조금 나음
findstr "원하는문자열입력" *.*
findstr /n "원하는문자열입력" *mobile.log*
-> /n을 붙이면 라인수가 같이 표기됨
mobile.log:874736:DEBUG|2019-06-11,14:41:41.973|mobile|원하는문자열입력|어쩌구저쩌구
ex)
findstr /s /n "원하는문자열입력" frameplus.log
findstr /n "원하는문자열입력" *mobile.log*
[특정단어 포함 + 특정단어 미포함 찾기. 원하는문자열찾기]
ex) Mid로 검색하되 setMid는 제외
- 검색을 실행하는 디렉터리에서, 특정파일에 대해 "Mid"로 조회된 결과 중, "setMid"는 제외한 내용의 라인+파일명 출력
ex) type *.java | findstr "Mid" | findstr /v "setMid"
- 검색을 실행하는 디렉터리 및 하위디렉터리에서, 특정파일에 대해 "Mid"로 조회된 결과 중, "setMid"는 제외한 내용의 라인+파일명 출력
ex) findstr /s /n "Mid" *.java | findstr /v "setMid"
특정 문자열이 존재하는 행 찾기 grep -n '원하는문자열입력' frameplus.log
[알아낸 행을 이용하여 특정 파일에서 행 특정해서 읽기]
sed -n '3709,3710p' frameplus.log
head -n 3710 frameplus.log | tail -n 2
findstr /s "원하는문자열입력" *.xml
알아낸 행을 이용하여 특정 파일에서 행 특정해서 읽기
결과출력(2개 동일)
[webapp]/webapp/frameplus/log>sed -n '3709,3710p' frameplus.log
$BL$DEBUG 2019-05-20 11:28:19 SQL ANONYMOUS NO-AuthInfo SQL#.0 [Executable] SELECT NAME, PASSWORD FROM X_USER WHERE ID = '원하는문자열입력'
$BL$DEBUG 2019-05-20 11:28:19 SQL ANONYMOUS NO-AuthInfo SQL#.0 [Executable] SELECT ID, NAME FROM X_USER WHERE ID = '원하는문자열입력'
[webapp]/webapp/frameplus/log> grep -n '원하는문자열입력' frameplus.log
sed -n '8300,8800p' frameplus.log
dir /s /b | find /i "G_rn"
findstr /s "HttpRequestUtil" *.*
===================================================
참고 : http://bumrak.blogspot.com/2015/03/findstr-windows-grep.html
기본사용법 : findstr /?
■ Tag 검색
findstr /m /l "BcMc" c:\windows\system32\drivers\*.sys
■ 특정 문자열 검색
findstr 문자열1 document.txt
findstr "문자열1 문자열2" document.txt
findstr /c:"똑같은 문자열만 찾아주세요" document.txt
■ W로 시작해서 ws로 끝나는 문자열 검색
findstr "W.*ws" document.txt
■ C: 드라이브와 하위폴더에서 문자열 검색 (대소문자 불문)
findstr /s /i 문자열1 C:\*.*
■ 파일목록내에 문자열 검색하기
findstr /f:C:\files.txt /m /l "BcMc"
findstr /g:argument.txt /f:files.txt
사용 방법 :
findstr "check" *
설명 : 현재디렉토리의 모든 파일에서 check가 포함된 라인을 출력
findstr /N "check" *
설명 : 몇번째 라인인지 확인하려면 /N 옵션 추가.
findstr /N /S "check" *
설명 : 하위 폴더까지 검색
findstr /N /S "check" *.txt
설명 : 특정 파일만 필터해서 검색하고 싶다면?
findstr /N /S "check" *.txt > findstr.log
설영 : 파일로 출력