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

関連情報