텍스트 파일에서 IP를 Grep하고 필터링합니다.

텍스트 파일에서 IP를 Grep하고 필터링합니다.

로그 파일이 있지만 파일에서 특정 IP를 추출하고 싶습니다. 로그 파일은 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

로그 파일의 경우 각 줄 IP의 첫 번째 부분만 가져오고 싶고 아래에서 시도하는 모든 명령은 내가 원하지 않는 많은 IP가 포함된 결과를 얻습니다( grep -E -o "([0-9 ] {1 ,3}[.]){3}[0-9]{1,3}" < honeylog.txt ) > 출력.txt

출력 .txt는 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

하지만 내가 원하는 유일한 IP는 첫 번째 부분인 192.168.80.12입니다. 각 줄의 grep이 첫 번째 결과에 도달하도록 한 다음 바로 두 번째 줄로 이동하여 grep을 다시 시작할 수 있는 방법이 있습니까?

답변1

다음과 같이 grep을 구성해 보십시오.grep -Po '(?<= - )[^ ]*'

사용 중인 시스템 유형에 따라 다를 것 같습니다... - Po는 mac osx에서는 작동하지 않지만 centos에서는 잘 작동합니다.

[rust@JBLGSMR001 ~]$ cat data.txt
2017-06-07-17:44:45.5903 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5904 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5905 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5906 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5907 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5908 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5909 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
[rust@JBLGSMR001 ~]$ cat data.txt | grep -Po '(?<= - )[^ ]*' >> output.txt
[rust@JBLGSMR001 ~]$ cat output.txt
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12

관련 정보