Awk 去掉前5个字符,而不是第32个字符之后的每一个字符?

Awk 去掉前5个字符,而不是第32个字符之后的每一个字符?,awk,grep,hex,wireshark,cut,Awk,Grep,Hex,Wireshark,Cut,是否有一种方法可以轻松地从.pcap中删除此十六进制转储文件的前5个字符,从十六进制字符中删除空格,然后在第32个十六进制字符之后删除解码的ascii?我已经阅读了cut操作符,并且使用了Python脚本,但无法使其工作,它似乎只是创建了一个非常大的.txt文件 0000 ca fe 00 00 ba be de ad 00 00 be ef 08 00 45 00 ..............E. 0010 00 c6 9a 59 40 00 40 06 88 38 c0 a8 01

是否有一种方法可以轻松地从.pcap中删除此十六进制转储文件的前5个字符,从十六进制字符中删除空格,然后在第32个十六进制字符之后删除解码的ascii?我已经阅读了cut操作符,并且使用了Python脚本,但无法使其工作,它似乎只是创建了一个非常大的.txt文件

0000  ca fe 00 00 ba be de ad 00 00 be ef 08 00 45 00   ..............E.
0010  00 c6 9a 59 40 00 40 06 88 38 c0 a8 01 c8 ac d9   ...Y@.@..8......
0020  a8 56 8b 18 01 bb 85 40 40 4f 4d 73 a6 1b 80 18   .V.....@@OMs....
0030  05 c1 fd 7f 00 00 01 01 08 0a df 7b 09 99 3e cb   ...........{..>.
0040  4d 9f 17 03 03 00 8d d3 6d ce 93 8c 4d ec bd 16   M.......m...M...
0050  91 21 b4 cf d5 cf 40 d6 79 5c 5d 0a 33 41 51 d3   .!....@.y\].3AQ.
0060  5c 81 1b 40 f7 bc fb 26 1e c3 0a 6d 1b e5 62 d5   \..@...&...m..b.
0070  04 18 43 a1 ec 8f 7f ca 3e bf 62 2f 77 f1 e4 0e   ..C.....>.b/w...
0080  62 d0 12 0a da cc 1c 03 f3 e6 32 d6 de 65 27 aa   b.........2..e'.
0090  3f 85 35 4d 11 7f 5a 1a 2d 41 08 27 97 98 e8 04   ?.5M..Z.-A.'....
00a0  88 03 1f 66 bd 56 f2 4c c2 0e 7d 47 5f c6 5d b0   ...f.V.L..}G_.].
00b0  52 d7 16 31 27 28 d5 01 9f b0 01 3f 14 3d a7 33   R..1'(.....?.=.3
00c0  39 b2 65 6c f2 3d 76 b3 2c 47 5b 2c f6 03 4a c8   9.el.=v.,G[,..J.
00d0  37 b6 24 9a                                       7.$.
预计第一行:

cafe0000babedead0000beef08004500
以下是我试图去掉的前5个字符:


tail-c+6 test2.txt>newfile.txt

请您尝试以下内容,并使用GNU awk中显示的示例编写和测试

说明:增加对以上内容的详细说明

awk '                   ##Starting awk program from here.
{
  val=""
  val=substr($0,5,50)   ##Creating val which has sub string of characters starting from 5th index to 50 more characters of current line.
  gsub(/ +/,"",val)     ##Globally substituting spaces with NULL in val here.
  print val             ##Printing val here.
}
' Input_file            ##Mentioning Input_file name here.

请您尝试以下,书面和测试显示的样本在GNU awk

说明:增加对以上内容的详细说明

awk '                   ##Starting awk program from here.
{
  val=""
  val=substr($0,5,50)   ##Creating val which has sub string of characters starting from 5th index to 50 more characters of current line.
  gsub(/ +/,"",val)     ##Globally substituting spaces with NULL in val here.
  print val             ##Printing val here.
}
' Input_file            ##Mentioning Input_file name here.
搜索所有空格分隔的字段,如果字段长度为2,则打印

搜索所有空格分隔的字段,如果字段长度为2,则打印。

sed-E的/^.{6}.{47}./\1/;s///g' 第一次替换仅保留在前6个字符之后找到的47个字符。第二次替换将删除这47个字符中的空格

与perl类似的逻辑:

perl-lne'print substr$\u6,47=~tr///dr' perl-pe的/^.{6}.{47}.*/$1=~tr | | | dr/e' 如果您愿意详细说明所有角色位置,也可以使用“剪切”:

切割-c7,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35,37,38,40,41,43,44,46,47,49,50,52,53 sed-E的/^.{6}.{47}.*/\1/;s///g' 第一次替换仅保留在前6个字符之后找到的47个字符。第二次替换将删除这47个字符中的空格

与perl类似的逻辑:

perl-lne'print substr$\u6,47=~tr///dr' perl-pe的/^.{6}.{47}.*/$1=~tr | | | dr/e' 如果您愿意详细说明所有角色位置,也可以使用“剪切”:

切割-c7,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35,37,38,40,41,43,44,46,47,49,50,52,53
我将使用GNU AWK按照如下方式进行操作,让file.txt内容

0000  ca fe 00 00 ba be de ad 00 00 be ef 08 00 45 00   ..............E.
0010  00 c6 9a 59 40 00 40 06 88 38 c0 a8 01 c8 ac d9   ...Y@.@..8......
0020  a8 56 8b 18 01 bb 85 40 40 4f 4d 73 a6 1b 80 18   .V.....@@OMs....
0030  05 c1 fd 7f 00 00 01 01 08 0a df 7b 09 99 3e cb   ...........{..>.
0040  4d 9f 17 03 03 00 8d d3 6d ce 93 8c 4d ec bd 16   M.......m...M...
0050  91 21 b4 cf d5 cf 40 d6 79 5c 5d 0a 33 41 51 d3   .!....@.y\].3AQ.
0060  5c 81 1b 40 f7 bc fb 26 1e c3 0a 6d 1b e5 62 d5   \..@...&...m..b.
0070  04 18 43 a1 ec 8f 7f ca 3e bf 62 2f 77 f1 e4 0e   ..C.....>.b/w...
0080  62 d0 12 0a da cc 1c 03 f3 e6 32 d6 de 65 27 aa   b.........2..e'.
0090  3f 85 35 4d 11 7f 5a 1a 2d 41 08 27 97 98 e8 04   ?.5M..Z.-A.'....
00a0  88 03 1f 66 bd 56 f2 4c c2 0e 7d 47 5f c6 5d b0   ...f.V.L..}G_.].
00b0  52 d7 16 31 27 28 d5 01 9f b0 01 3f 14 3d a7 33   R..1'(.....?.=.3
00c0  39 b2 65 6c f2 3d 76 b3 2c 47 5b 2c f6 03 4a c8   9.el.=v.,G[,..J.
00d0  37 b6 24 9a                                       7.$.
然后

输出:

cafe0000babedead0000beef08004500
00c69a59400040068838c0a801c8acd9
a8568b1801bb8540404f4d73a61b8018
05c1fd7f00000101080adf7b09993ecb
4d9f170303008dd36dce938c4decbd16
9121b4cfd5cf40d6795c5d0a334151d3
5c811b40f7bcfb261ec30a6d1be562d5

说明:我为2个或更多的空格设置了字段分隔符FS,然后从第2列$2中删除所有空格,并打印更改后的列。

我将使用GNU AWK按如下方式执行,让file.txt内容

0000  ca fe 00 00 ba be de ad 00 00 be ef 08 00 45 00   ..............E.
0010  00 c6 9a 59 40 00 40 06 88 38 c0 a8 01 c8 ac d9   ...Y@.@..8......
0020  a8 56 8b 18 01 bb 85 40 40 4f 4d 73 a6 1b 80 18   .V.....@@OMs....
0030  05 c1 fd 7f 00 00 01 01 08 0a df 7b 09 99 3e cb   ...........{..>.
0040  4d 9f 17 03 03 00 8d d3 6d ce 93 8c 4d ec bd 16   M.......m...M...
0050  91 21 b4 cf d5 cf 40 d6 79 5c 5d 0a 33 41 51 d3   .!....@.y\].3AQ.
0060  5c 81 1b 40 f7 bc fb 26 1e c3 0a 6d 1b e5 62 d5   \..@...&...m..b.
0070  04 18 43 a1 ec 8f 7f ca 3e bf 62 2f 77 f1 e4 0e   ..C.....>.b/w...
0080  62 d0 12 0a da cc 1c 03 f3 e6 32 d6 de 65 27 aa   b.........2..e'.
0090  3f 85 35 4d 11 7f 5a 1a 2d 41 08 27 97 98 e8 04   ?.5M..Z.-A.'....
00a0  88 03 1f 66 bd 56 f2 4c c2 0e 7d 47 5f c6 5d b0   ...f.V.L..}G_.].
00b0  52 d7 16 31 27 28 d5 01 9f b0 01 3f 14 3d a7 33   R..1'(.....?.=.3
00c0  39 b2 65 6c f2 3d 76 b3 2c 47 5b 2c f6 03 4a c8   9.el.=v.,G[,..J.
00d0  37 b6 24 9a                                       7.$.
然后

输出:

cafe0000babedead0000beef08004500
00c69a59400040068838c0a801c8acd9
a8568b1801bb8540404f4d73a61b8018
05c1fd7f00000101080adf7b09993ecb
4d9f170303008dd36dce938c4decbd16
9121b4cfd5cf40d6795c5d0a334151d3
5c811b40f7bcfb261ec30a6d1be562d5
说明:我为2个或更多空格设置了字段分隔符FS,然后从第2列$2中删除所有空格,并打印更改后的列。

使用Perl

$ perl -ne ' m/\s+(.+)\s{2,}/ ; ($s=$1)=~s/\s//g; print "$s\n" ' flowermia.pcap
cafe0000babedead0000beef08004500
00c69a59400040068838c0a801c8acd9
a8568b1801bb8540404f4d73a61b8018
05c1fd7f00000101080adf7b09993ecb
4d9f170303008dd36dce938c4decbd16
9121b4cfd5cf40d6795c5d0a334151d3
5c811b40f7bcfb261ec30a6d1be562d5
041843a1ec8f7fca3ebf622f77f1e40e
62d0120adacc1c03f3e632d6de6527aa
3f85354d117f5a1a2d4108279798e804
88031f66bd56f24cc20e7d475fc65db0
52d716312728d5019fb0013f143da733
39b2656cf23d76b32c475b2cf6034ac8
37b6249a
$
使用Perl

$ perl -ne ' m/\s+(.+)\s{2,}/ ; ($s=$1)=~s/\s//g; print "$s\n" ' flowermia.pcap
cafe0000babedead0000beef08004500
00c69a59400040068838c0a801c8acd9
a8568b1801bb8540404f4d73a61b8018
05c1fd7f00000101080adf7b09993ecb
4d9f170303008dd36dce938c4decbd16
9121b4cfd5cf40d6795c5d0a334151d3
5c811b40f7bcfb261ec30a6d1be562d5
041843a1ec8f7fca3ebf622f77f1e40e
62d0120adacc1c03f3e632d6de6527aa
3f85354d117f5a1a2d4108279798e804
88031f66bd56f24cc20e7d475fc65db0
52d716312728d5019fb0013f143da733
39b2656cf23d76b32c475b2cf6034ac8
37b6249a
$

为了更好地理解这个问题,请您在您的问题中发布预期输出的示例,谢谢。完成了,好主意!为了更好地理解这个问题,请您在您的问题中发布预期输出的示例,谢谢。完成了,好主意!仅供参考,该脚本中没有GNU特定的内容,任何awk的行为都是一样的。仅供参考,该脚本中没有GNU特定的内容,任何awk的行为都是一样的。