awk表达式从给定输入中获取特定模式

时间:2012-01-02 06:22:23

标签: shell unix scripting awk

我有一个pcap文件作为输入,我想从文件中获取特定的字符串。我使用了以下命令: -

/home/rahul/vPath-dissector/binaries/wireshark-1.6.1/bin/tshark -r /home/rahul/Downloads/abc.pcap -V -x -O FTP | grep '^[0-9]\{4\}'

然后我得到以下输出: -

0000  08 00 27 8f 99 c4 08 00 27 f3 90 1f 08 00 45 10   ..'.....'.....E.
0010  00 34 46 1d 40 00 40 06 5f 31 c0 a8 0a 0a c0 a8   .4F.@.@._1......
0020  0a 0b 00 15 89 56 1d 37 75 c6 8a df 8e c3 80 11   .....V.7u.......
0030  00 b5 9a 9d 00 00 01 01 08 0a 00 15 41 94 01 bb   ............A...
0040  cc 93                                             ..


0000  08 00 27 f3 90 1f 08 00 27 8f 99 c4 08 00 45 10   ..'.....'.....E.
0010  00 34 33 e0 40 00 40 06 71 6e c0 a8 0a 0b c0 a8   .43.@.@.qn......
0020  0a 0a 89 56 00 15 8a df 8e c3 1d 37 75 c7 80 10   ...V.......7u...
0030  00 5c 9a f5 00 00 01 01 08 0a 01 bb cc 94 00 15   .\..............
0040  41 94                                             A.

我希望输出为: -

08 00 27 8f 99 c4 08 00 27 f3 90 1f 08 00 45 10
00 34 46 1d 40 00 40 06 5f 31 c0 a8 0a 0a c0 a8
0a 0b 00 15 89 56 1d 37 75 c6 8a df 8e c3 80 11
00 b5 9a 9d 00 00 01 01 08 0a 00 15 41 94 01 bb
cc 93  


08 00 27 f3 90 1f 08 00 27 8f 99 c4 08 00 45 10
00 34 33 e0 40 00 40 06 71 6e c0 a8 0a 0b c0 a8
0a 0a 89 56 00 15 8a df 8e c3 1d 37 75 c7 80 10
00 5c 9a f5 00 00 01 01 08 0a 01 bb cc 94 00 15
41 94

如果我使用awk将字符串打印到18美元左右,那么我最后一行会遇到问题,因为在某些数据包中它的长度小于固定长度,所以它也提供了其他字符串,这是我不想要的。

注意: - 在00X0和XX之间,有两个空格,在结尾的随机字符串之间有三个空格

所以,我希望字符串达到这三个空格,而不是在它们之后休息......

请帮助我使用awk表达式,它将为我提供我指定的输出....

2 个答案:

答案 0 :(得分:1)

很简单,试试这个:

 awk -F'  +' '{print $2}' ./infile

输出

$ awk -F'  +' '{print $2}' ./infile
08 00 27 8f 99 c4 08 00 27 f3 90 1f 08 00 45 10
00 34 46 1d 40 00 40 06 5f 31 c0 a8 0a 0a c0 a8
0a 0b 00 15 89 56 1d 37 75 c6 8a df 8e c3 80 11
00 b5 9a 9d 00 00 01 01 08 0a 00 15 41 94 01 bb
cc 93


08 00 27 f3 90 1f 08 00 27 8f 99 c4 08 00 45 10
00 34 33 e0 40 00 40 06 71 6e c0 a8 0a 0b c0 a8
0a 0a 89 56 00 15 8a df 8e c3 1d 37 75 c7 80 10
00 5c 9a f5 00 00 01 01 08 0a 01 bb cc 94 00 15

注意: 的 如果您有gawk,则可以完全删除grep命令并将其转换为awk,如此

awk --re-interval -F'  +' '/^[0-9]{4}/{print $2}' ./infile

答案 1 :(得分:0)

尝试使用剪切

xxd file | cut -d\  -f3-18

警告:未经测试