パターンが一致するまで行を削除する必要があります

パターンが一致するまで行を削除する必要があります

私の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)/{/'

おすすめ記事