sed는 word1과 word2를 일치시켜 그 사이에 있는 단어를 가져옵니다.

sed는 word1과 word2를 일치시켜 그 사이에 있는 단어를 가져옵니다.

로그 파일 호출의 전체 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

관련 정보