2017-11-16 14 views
2

私は継続的に私のIMAPサーバーをbruteforcingされる日/月とIPを抽出していますsedまたはawkを使って、月、月、IPアドレスをどのように抽出するのですか?

Nov1 unknown[186.216.99.239]: 
Nov1 unknown[62.249.196.214]: 
Nov1 unknown[110.145.123.120]: 
Nov1 fixed-187-190-251-149.totalplay.net[187.190.251.149]: 
Nov1 pd9568164.dip0.t-ipconnect.de[217.86.129.100]: 
Nov1 unknown[103.227.88.130]: 

私は、出力は以下のようになりたい:

Nov1 186.216.99.239 
Nov1 62.249.196.214 
Nov1 110.145.123.120 
Nov1 187.190.251.149 
Nov1 217.86.129.100 
Nov1 103.227.88.130 

私はSEDの組み合わせを使用して、この結果を達成、awkとコードの下にカット、しかし私は良い方法があるかどうかを学びたいと思いますか?

while read -r line 
    do 
     monthday=$(echo $line | awk '{ print $1 }') 
     # ip=$(echo $line | awk -F'[\\\[\\\]]' { print $2 }) 
     ip=$(echo $line| cut -d[ -f2| cut -d] -f1) 
     echo "${monthday} ${ip}" 
    done < badIpList.txt 
+0

ここにある回答の一覧でIPアドレスを抽出することができます。https://stackoverflow.com/questions/14928573/sed-how-to-extract-ip-address-using-sed –

答えて

1

AWK溶液:

awk -F'[[:space:]\\[\\]]' '{print $1,$3}' file 
  • -F'[[:space:]\\[\\]]' - 複合フィールドセパレータ、空白[:space:]又は[又は]のいずれか。それによって、例えば、 Nov1 unknown[186.216.99.239]:をフィールドに分割される:1)Nov1、2)unknown、3)186.216.99.239及び4):

出力:

Nov1 186.216.99.239 
Nov1 62.249.196.214 
Nov1 110.145.123.120 
Nov1 187.190.251.149 
Nov1 217.86.129.100 
Nov1 103.227.88.130 
SEDこのシンプルな
+0

私はそれをシンプルで簡単に見つける:)それを少し記述してもよろしいですか? –

+1

@satch_boogie、はい、私の説明を見てください – RomanPerekhrest

1

何のループは必要ありません。この

sed -E 's/\s.*\[(.*)\]:/ \1/' file 

を試してみてください。 AWKで

4

第1及び第3のフィールドを印刷し、次に、空間のいずれかに[又は]をフィールドセパレータを設定:フィールドセパレータは、正規表現、即ちブラケット表現であることを

$ awk -F "[][ ]" '{ print $1, $3 }' infile 
Nov1 186.216.99.239 
Nov1 62.249.196.214 
Nov1 110.145.123.120 
Nov1 187.190.251.149 
Nov1 217.86.129.100 
Nov1 103.227.88.130 

お知らせ[][ ]gawk manualから:

は、ブラケット表現内の文字\]の1、-、または^を含めるには、その前に\を置きます。

文字列(「dynamic/computed regexps」)に保存された正規表現が二回、我々はバックスラッシュをエスケープする必要がありをスキャンしているので、だから、式は

[\[\] ] 

が、なければならないであろう。

-F '[\\[\\] ]' 

二重引用符を使用する場合は、バックスラッシュとバックスラッシュの両方をエスケープする必要があります。

-F "[\\\[\\\] ]" 

明らかにすべてがあまりにも読みやすいわけではありません。あなたは右開き[]を配置する場合

また、閉じ括弧が一致する文字の一つとして扱われます。ありがたいことに、抜け穴があります。

ので、私たちも、二重引用符で

-F "[][ ]" 

で逃げます。ところで、二重引用符を使用する本当の理由はありません。

+0

wありがとう私は年齢のための "[] []"についてのこの質問を持っていました、そして、今、その歓声をクリアしました:) –

1

$ sed -r 's|^([^ ]*)[^[]*\[([^]]*)\].*|\1 \2|' badIpList.txt 
Nov1 186.216.99.239 
Nov1 62.249.196.214 
Nov1 110.145.123.120 
Nov1 187.190.251.149 
Nov1 217.86.129.100 
Nov1 103.227.88.130 

論理:最初の単語と大括弧の内容を表示します。

関連する問題