这是捕获数据包的tcpdump十六进制输出。
使用的命令是..
$ tcpdump -X -s0 protochain <portno>
0x0000: 6000 0000 0080 3220 0000 0000 0000 0000 ................
0x0040: 0000 0000 0000 0001 0000 0000 0000 0000 ................
0x0090: 6174 6500 0000 0329 ........
这些...
可以是与指定的十六进制字符对应的ascii字符。我需要提取中间的十六进制部分。
我需要以下列格式输出。请给我一些建议。
6000 0000 0080 3220 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000
6174 6500 0000 0329
我试过这个,但这似乎不正确..
cut -d ":" -f2 tmp_packet.txt | awk -F " " '{printf "%s %s %s %s %s %s %s %s
\n",$1,$2,$3,$4,$5,$6,$7,$8}' > packet.txt
尝试使用cut -b
,但这会产生奇怪的输出。
如果可能,建议使用awk NR
和NF
。我是awk的新手,所以不太了解他们。
我尝试了这个并将...
作为输出。
cut -d ":" -f2 tmp_packet.txt | awk -F " " '{printf "%s\n",$NF}' > packet.txt
输出
................
................
........
有没有办法使用awk打印除最后一列之外的所有列(即打印除上述指定之外的所有列)。
答案 0 :(得分:2)
答案 1 :(得分:1)
按空格切割:cut -d " " -f 3-10
答案 2 :(得分:0)
您的AWK解决方案 - awk '{for(i=2;i<=9;i++) printf $i" ";printf "\n"}' file | sed 's/\.*//g'
[jaypal~/Temp]$ cat file
0x0000: 6000 0000 0080 3220 0000 0000 0000 0000 ................
0x0040: 0000 0000 0000 0001 0000 0000 0000 0000 ................
0x0090: 6174 6500 0000 0329 ........
[jaypal~/Temp]$ awk '{for(i=2;i<=9;i++) printf $i" ";printf "\n"}' file | sed 's/\.*//g'
6000 0000 0080 3220 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000
6174 6500 0000 0329
通过AWK打印的另一种方式 -
[jaypal~/Temp]$ awk '{$1="";$10=""; print}' file | sed 's/\.*//g'
6000 0000 0080 3220 0000 0000 0000 0000
0000 0000 0000 0001 0000 0000 0000 0000
6174 6500 0000 0329
答案 3 :(得分:0)
这可能对您有用:
sed 's/.\{9\}\(.\{39\}\).*/\1/' file
或者如果你想删除尾随空格:
sed 's/.\{9\}\(.\{39\}\).*/\1/;s/\s*$//' file