리눅스에서 grep 명령어는 특정 문자열만 출력하는 기능으로 리눅스에서 가장 많이 사용되는 명령어 중 하나입니다. 윈도우에도 grep 명령어와 비슷한 find, findstr 명령어가 있습니다.
find에서 기능을 추가한 것이 findstr이라고 보시면 됩니다.
find 명령어 사용방법부터 알아보겠습니다.
find /? 를 입력하면 옵션 및 사용방법을 확인할 수 있습니다.
netstat -ano | find "문자열" 입력 시 문자열이 포함된 열만 출력합니다.
/v 옵션은 관련 문자열이 포함된 열을 제외하고 출력합니다.
find 명령어를 이용하여 파일 내용에서 특정 문자열로 필터링 가능합니다.
find "문자열" [대상 파일명] >> [저장할 파일명]
예를 들면 find "service=icmp" log.txt >> service_icmp.txt 을 실행하면 log.txt 파일에서 service=icmp 문자열이 포함된 행을 필터링하고 결과를 service_icmp.txt 파일로 저장합니다.
참고로 필터링 결과를 파일로 저장할 때 사용하는 >>는 저장할 파일명과 동일한 파일이 있다면 이어서 저장하고 >는 기존 내용은 지워지고 새로운 내용으로 덮어쓰기입니다.
service_icmp.txt 파일을 열어보면 find 명령에 의해 필터링 되어 service=icmp 문자열이 포함된 행만 저장된 것을 확인할 수 있습니다.
findstr에 대해 알아보겠습니다. 마찬가지로 /? 를 입력하면 옵션 및 사용방법을 확인할 수 있습니다. find 명령에 비해 더 많은 옵션을 제공하며 정규 표현식 사용이 가능합니다.
findstr /s /i "policy_id=1 service=smtp" * > id1_smtp.txt
/s 옵션은 하위 디렉터리까지 탐색하며, /i 옵션은 대소문자를 구분하지 않습니다. 그리고 "문자열1 문자열2"를 입력하면 문자열1 또는 문자열2가 포함된 행을 출력합니다.(or 조건) 대상 파일명을 *로 설정하면 해당 디렉터리에 모든 파일에 대해 필터링합니다.
findstr /s /i /c:"policy_id=1 service=smtp" * > id1_smtp.txt
/c: 옵션은 문자열 그대로 검색하는 옵션입니다. 앞에서는 공백이 들어갔을 때 공백으로 문자열을 구분해서 or 조건이 되었으나 /c:옵션은 공백까지 문자열로 인식해서 policy_id=1 service=smtp 라는 문자열이 포함된 행을 출력합니다.
find와 findstr 명령어를 동시에 사용 가능합니다.
netstat -na | findstr "ESTABLISHED" | find "443"
예를 들면 netstat 명령어로 네트워크 연결정보를 확인했을 때 443 포트로 통신하고 상태가 ESTABLISHED인 목록을 확인할 수 있습니다.