tailfとsedを使用してIPテーブルログの部分文字列のみを埋め、表示する方法は?

tailfとsedを使用してIPテーブルログの部分文字列のみを埋め、表示する方法は?

iptableログの1行は次のとおりです。

Jan  1 21:41:19 x kernel: [838760.885218] IPTables-Dropped: IN=eth0 OUT= MAC=x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:00:x:00:00:x:00:x:x:x:x SRC=x.x.x.x DST=x.x.x.x LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=37739 DPT=53 LEN=50 

私が使ったライブ放送を見るには:

tailf /var/log/kern.log

しかし、ご覧のとおり、ここには多くの情報が含まれています。だから私はその行のソースとターゲットのフィールドだけを見ました。

コマンドを次のように変更しました。

tailf /var/log/kern.log | sed -n -e 's/^.*DST: //p'

しかし、まだ何もありません。送信元と宛先のIPアドレスのみを表示するように変更する方法はありますか?それとも、コマンドよりも複雑なソリューションを見つける必要がありますか?

答え1

[...]行のソースフィールドとターゲットフィールドのみを参照してください。

私は次のようなものを使いますgrep

echo "Jan  1 21:41:19 x kernel: [838760.885218] IPTables-Dropped: IN=eth0 OUT= MAC=x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:x:00:x:00:00:x:00:x:x:x:x SRC=192.168.1.10 DST=192.168.1.20 LEN=70 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=37739 DPT=53 LEN=50" | egrep -o 'SRC=[0-9.]* DST=[0-9.]*'
SRC=192.168.1.10 DST=192.168.1.20

あなたの場合は次のとおりです。

tailf /var/log/kern.log | egrep -o 'SRC=[0-9.]* DST=[0-9.]*'

答え2

以下のコマンドで存在する最大列を確認してください。

awk '{print NF}' /var/log/kern.log/sort -rn | head -1forループmaxに対応する値を割り当てます。

与えられた入力によると、存在する最大列は22なので、forループで22の値を割り当てます。

for ((i=1;i<=22;i++)); do tail -f /var/log/kern.log |awk -v i="$i" '$i ~ "SRC" {print $i}';tail -f /var/log/kern.log | awk -v i="$i" '$i ~ "DST" {print $i}'  ; done

output
SRC=x.x.x.x
DST=x.x.x.x

答え3

何を期待しましたか?行にDST:.use が含まれていません。

sed -n 's/.*\(SRC=.*DST=[^ ]\).*/\1/p'

試合内のすべてのアイテムを削除\(\)

関連情報