私のCコードは、他のアプリケーションがソケットを介して受け取るいくつかのアプリケーションデータをデコードする必要があります。私はWiresharkを使って多くのパケットをC配列にエクスポートします。ただし、アレイにはIPアドレス/ポートを含むすべてのバイトが含まれます。アプリケーションデータだけが必要です。
C配列は次のようになります。
静的定数 unsigned char pkt64[393] = { 0x00, 0x04, 0x00, 0x01, 0x00, 0x06, 0xd8, 0x9d, /* ........ */ 0x67, 0x16, 0x55, 0xc0, 0x00, 0x00, 0x08, 0x00, /* gU.... */ 0x45、0x00、0x01、0x79、0xf1、0x09、0x40、0x00、/* E..y..@。 */ 0x40, 0x06, 0xc1, 0xee, 0x0a, 0x17, 0x6f, 0x35, /* @.....o5 */ 0x0a、0xd7、0x02、0x64、0xe3、0xa4、0x18、0x54、/* ...d...T */ 0x8c, 0xa2, 0xd6, 0xb1, 0xe9, 0xa5, 0x0c, 0xd2, /* ........ */ 0x80、0x18、0x14、0x12、0x87、0xf2、0x00、0x00、/* ........ */ 0x01、0x01、0x08、0x0a、0x4a、0x0c、0x9a、0x21、/*....J..! */ 0x94、0x8d、0xb2、0x23、0x01、0x43、0x60、0x00、/* ...#.C` */ 0x06、0x00、0x58、0x6f、0x12、0x00、0x30、0x30、/*..Xo..00*/ 0x47, 0x00, 0x20, 0xe2, 0x82, 0x19, 0x00, 0x10, /* G... */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x95, /* ........ */ 0x42, 0x38, 0x14, 0x04, 0x24, 0x11, 0x57, 0x14, /* B8..$.W */ 0x58、0x12、0x30、0x30、0x11、0x00、0x40、0x00、/* X.00..@ */ [...] 0x39、0x38、0x35、0x2d、0x31、0x31、0x37、0x00、/ * 985-117。 */ 0x03, 0x14, 0x10, 0x00, 0x00, 0x03, 0x28, 0x00, /* ......(. */ 0x01, 0x19, 0x95, 0xe2, 0xcf, 0x53, 0x13, 0xa2, /* .....S.. */ 0xd5 /* */ };
私のアプリケーションデータはbytesで始まります0x60, 0x00, 0x06, 0x00
。したがって、関心のあるアプリケーションデータまで、すべての行とバイトを削除する必要があります。デコードするパケットが多いため、grep / sedを使用して要件を満たすにはどうすればよいですか?
ベストアンサー1
最初の70バイトを削除するには:
perl -0777 -pe 's{(?:0x[0-9a-f]{2},\s*(?:/\*.*?\*/)?\s*){70}}{}'
最初のアイテムまで削除0x60, 0x00, 0x06, 0x00
:
perl -0777 -pe 'BEGIN{$c=qr{,\s*(?:/\*.*?\*/)?\s*}}
s/{(?s:.*?)(?=0x60${c}0x00${c}0x06${c}0x00)/{/'