Linux grep 사용법

출력 옵션

찾으려는 내용이 있는 파일명 출력

-H, --with-filename 옵션 사용 (기본이므로 추가 필요 없음)

grep -H pattern *

찾은 파일명은 출력하지 않음

-h, --no-filename 옵션 사용

grep -h pattern *

Context Line Control

-A NUM, --after-context=NUM 옵션을 사용하면 찾은 부분 이후의 NUM 번째 라인까지 출력합니다. 다음 옵션은 pattern 을 찾은 후에 pattern 이 있는 부분부터 4번째 line 까지 출력합니다.

grep -A 4 pattern *


반대로 -B NUM, --before-context=NUM 옵션을 사용하면 찾은 부분 이전의 NUM 번째 라인까지 출력합니다. 다음 옵션은 pattern 을 찾은 후에 pattern 이 있는 부분부터 위로 4번째 line 까지 출력합니다.

grep -B 4 pattern *



파일명만 출력하고 일치하는 내용은 출력하지 않음

  -l, --files-with-matches 옵션 사용, 결과가 많을 경우 유용

grep -l pattern *


일치하는 부분만 출력

-o, --only-matching 를 사용하면 일치하는 문자만 출력

grep -o pattern *



검색 제어

or 연산

grep 'pattern1\|pattern2' filename


정규식 사용

-E 옵션을 사용하면 Extended regex 문법 사용 가능(기본은 POSIX)

abc 뒤에 3자리 숫자 찾기
echo "abc-123 test" | grep -E abc-[0-9]{3}

사용 예

ssh 접속 시도 IP 추출

ssh 가 열려 있을 경우 취약점을 통해 접속하려는 로그가 secure 에 남게 됨

Bad protocol version identification '\003' from 141.98.81.34 port 59559


아래의 명령어로 접속 시도하는 IP 를 추출한 후에  firewall-cmd 를 사용하여 IP 를 drop 할 수 있음.

grep "Bad pro" /var/log/secure*|grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"|grep -v '\\'|uniq > drop-ip.txt
IP 목록 차단
$ sudo bash firewallcmd-drop-client.sh -i 1.2.3.4,11.22.33.44
파일에서 IP 목록 읽어서 차단
$ sudo bash firewallcmd-drop-client.sh -f drop-ip-list


같이 보기

Ref