로그 파일 호출의 전체 IP 주소를 추출하는 데 문제가 있습니다.
파일의 행은 다음과 같습니다.
[2016-11-10 11:22:42] 공지[24518] chan_sip.c: "62.210.189.39:6584"에 대한 "100" 등록 실패 - 잘못된 비밀번호
'
사이의 IP 주소만 필요합니다.:
아래는 IP를 추출하기 위해 시도한 내용입니다.
sed -e "/failed[[:space:]]for[[:space:]]'*.*.*.*:*'/,/[[:space:]]-[[:space:]]Wrong[[:space:]]Password/p" full > output.txt
답변1
매우 기본적인 솔루션은 다음을 사용합니다.cut
cut -d \' -f 4 < full | cut -d : -f 1 > output.txt
62.210.189.39
이 내용을 몇 줄로 필터링하고 싶을 수도 있으므로 Wrong Password
여기에도 그 중 일부가 나와 있습니다.
grep 'Wrong Password' full | cut -d \' -f 4 |cut -d : -f 1 > output.txt
이것은 약간 더 복잡한 버전입니다.sed
sed -e "s/.*failed for '\([0-9\.]*\):.*/\1/" full > output.txt
그룹화를 사용하여 괄호 안의 IP 주소 추출
그냥 재미로 하나 만들어 봤습니다perl
perl -n -e "/failed for '([\d.]+):/ && print \$1 . \"\n\"" full > output.txt
이것은 또한 grep
나에게 도움이 된 질문에 대한 설명의 명령입니다.
grep -oP '(\d{1,3}\.{1})+\d{1,3}' full > output.txt
답변2
당신은 말한다,
'와 : 사이에 IP 주소가 필요합니다.
따라서 다음 문자를 필드 구분 기호로 사용하고 IP 주소를 선택해 보겠습니다.
$ awk -F "[':]" '{ print $7 }' file
62.210.189.39
다음 문자열을 포함하는 줄로 출력을 제한하려는 경우 Wrong password
:
$ awk -F "[':]" '/Wrong password/ { print $7 }' file
'
필드 구분 기호로 및를 사용 하여 행을 구분하면 :
다음과 같은 필드가 생성됩니다.
[2016-11-10 11:22:42] NOTICE[24518] chan_sip.c: Registration from '"100" ' failed for '62.210.189.39:6584' - Wrong password
^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^
field1 f2 field3 field4 field5 field6 field7 f8 field9