ログファイル呼び出しの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