*/log/* 디렉터리에서 모든 IP 주소를 찾아 이 줄을 중복 없이 파일에 출력합니다.

*/log/* 디렉터리에서 모든 IP 주소를 찾아 이 줄을 중복 없이 파일에 출력합니다.

호출 디렉터리의 파일에서 IP 주소가 있는 모든 줄을 검색하여 log파일에 쓰려고 하는데 전혀 성공하지 못합니다. 현재 나는 다음을 입력하고 있습니다:

find . -path "*/log/*" -type f | xargs grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | xargs grep -v "[myip]" > log.txt | sort -u

그러나 이는 다음과 같은 결과만 출력합니다.

Binary file ./var/log/wtmp.1 matches
Binary file ./var/log/lastlog matches
Binary file ./var/log/btmp matches
Binary file ./var/log/btmp.1 matches
Binary file ./var/log/wtmp matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-00000000000334f4-000547883cd64bfc.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-000000000003109b-000547834461e9ac.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-000000000002ec72-0005477e385a43c7.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-000000000002c42c-0005477bb1a39b46.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-0000000000029d35-00054776e06fb915.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-0000000000027310-000547743bc488ca.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-0000000000024a25-00054771307a13d2.journal matches
Binary file ./run/log/journal/9dec9e4e32834bb59a2d5e1c50895ca5/system@4d01f718aa76471eafb1b2faa76e05e2-0000000000022116-0005476e66afb18c.journal matches

그것은 내가 추구하는 바가 전혀 아닙니다. 이 쿼리를 올바르게 작성해야 합니까? 이상적으로 출력은 다음과 같아야 합니다.

Started GET "/" for [IP] at 2017-02-02 19:15:39 +0000
Cannot render console from 85.248.227.164! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
[...]
Jan 29 06:25:04 ubuntu sshd[24085]: Failed password for root from [IP] port 41348 ssh2

등, 내 IP 주소 및 관련 결과는 제외됩니다. 이상적으로는 각 일치 항목 앞에 파일 경로와 줄 번호가 옵니다.

find . -path "*/log/*" -type f | exec grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" {} > log.txt

로그 파일에는 아무 것도 출력되지 않습니다. 일부 문제는 추가 프로세스와 관련된 것 같습니다.

find . -path "*/log/*" -type f | xargs grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" > log.txt

IP 주소를 출력합니까? 중복된 콘텐츠를 많이 가져오고 내가 원하지 않는 IP로 결과를 로드합니다.

답변1

나는 그것을 작동시키기 위해 다음을 사용했습니다.

regex="(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
sudo find / -path "*/log/*" -type f -exec grep -Eo $regex {} +

정렬하려면 파이프 sort하고 리디렉션을 추가하여 파일에 넣으세요.

sudo find / -path "*/log/*" -type f -exec grep -Eo $regex {} + \
  | grep -v "[myip]" | sort | uniq > log.txt

관련 정보