Sh 简化“tcpdump”输出
我想转换此Sh 简化“tcpdump”输出,sh,freebsd,tcpdump,Sh,Freebsd,Tcpdump,我想转换此tcpdump输出: IP 10.10.10.1 > 20.20.20.1: ICMP echo request, id 8312, seq 0, length 64 IP 10.10.10.1.17441 > 20.20.20.1.22: Flags [S], seq 3936449810, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS[|tcp]> 致: 我尝试了很多通过使用cut命令用shell脚本来隐
tcpdump
输出:
IP 10.10.10.1 > 20.20.20.1: ICMP echo request, id 8312, seq 0, length 64
IP 10.10.10.1.17441 > 20.20.20.1.22: Flags [S], seq 3936449810, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS[|tcp]>
致:
我尝试了很多通过使用cut
命令用shell脚本来隐藏它们,但是我做不到
谢谢大家的帮助。这是一种严格意义上的
cut
方法。它假设您的输出总是这种格式。如前所述,sed
(或awk
)版本可能更具动态性
其中的主要部分是-d
(分隔符)参数和-f
(字段)参数-f
可以指定由指定分隔符分隔的单个字段或字段范围(我认为默认为制表符)
如果您的输出在一个名为output.txt的文件中,您可以使用这个小脚本
line1="$(head -1 output.txt | cut -d ' ' -f1-5)"
line2="$(tail -1 output.txt | cut -d ' ' -f1-4) $(tail -1 output.txt | cut -d '|' -f2 | cut -d "]" -f1)"
echo "$line1"
echo "$line2"
如果输出存储在名为output的变量中,则可以将此脚本用于
变量作为参数发送,如/script.sh“$output”
输出:
IP 10.10.10.1 > 20.20.20.1: ICMP
IP 10.10.10.1.17441 > 20.20.20.1.22: tcp
使用awk
(或GNUgawk
),将字段分隔符FS
设置为“:”,并假设dump位于test.txt内:
gawk 'BEGIN{ FS=":" } { if($0 ~ / ICMP /){ print $1 ": ICMP" }else if($0 ~ /tcp[]]>/){ print $1 ": tcp" } }' test.txt
预期结果:
IP 10.10.10.1 > 20.20.20.1: ICMP
IP 10.10.10.1.17441 > 20.20.20.1.22: tcp
tcpdump
输出可以通过管道传输到gawk
as
tcpdump <options> | gawk ' ... '
tcpdump | gawk'…'
请包含生成给定输出的确切的tcpdump
命令。您可能需要查看。
IP 10.10.10.1 > 20.20.20.1: ICMP
IP 10.10.10.1.17441 > 20.20.20.1.22: tcp
tcpdump <options> | gawk ' ... '