모든 파일과 디렉터리의 모든 파일에서 IP 주소를 찾는 grep 표현식을 찾으려고 합니다.
아직 grep을 마스터하지 않았지만 "해야 한다"고 생각하시나요? 간단한 일. 어떤 아이디어가 있나요?
답변1
일치하는 확장 패턴은 IPv4 주소처럼 보이며 0.0.0.0에서 255.255.255.255 범위 사이에만 있습니다.
((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])
이 표현식과 그 뒤에 나오는 모든 표현식에는 egrep
(또는 )을 사용해야 합니다 .grep -E
이는 1111.2.3.444와 일치하므로 이상한 이상값도 포착합니다 111.2.3.44
. (더 복잡한 테스트를 작성할 수 있지만 읽기가 어렵습니다.)
1111.2.3.444에 관심이 없다면,그리고999.000.011.555 일치와 같은 것에 신경 쓰지 않으면 주석에서 ilkkachu가 제안한 더 간단한 정규식은 입니다 ([0-9]{1,3}\.){3}[0-9]{1,3}
.
모든 디렉토리를 보려면 다음을 병합해야 할 수도 있습니다 find
.
find /var/log -type f -exec egrep '([0-9]{1,3}\.){3}[0-9]{1,3}' '{}' +
이는 시리즈의 각 파일에서 실행하는 대신 GNU find
동작을 사용하여 단일 명령줄을 생성하고 일치하는 파일의 이름을 먼저 인쇄합니다(거의 모든 파일이 이 작업을 수행함).+
grep
grep
grep
IPv6 주소를 감지하는 것은 이 답변의 범위를 벗어납니다.