Generuję pliki danych binarnych, które są po prostu serią rekordów połączonych ze sobą. Każdy rekord składa się z nagłówka (binarnego), a następnie danych binarnych. W nagłówku binarnym znajduje się ciąg znaków ASCII o długości 80 znaków. Gdzieś po drodze mój proces zapisywania plików został trochę sponiewierany i próbuję rozwiązać ten problem, sprawdzając, jak długo każdy z tych rekordów faktycznie jest."grep" przesunięcie łańcucha ascii z pliku binarnego
This wydaje się być bardzo powiązany, ale nie rozumiem perla, więc nie byłem w stanie uzyskać akceptowanej odpowiedzi tam do pracy. Druga odpowiedź wskazuje na bgrep
, którą skompilowałem, ale chce, żebym go podał w postaci ciągu szesnastkowego, a ja wolałbym mieć narzędzie, w którym mogę nadać mu ciąg ascii, a znajdzie go w danych binarnych, wydrukuj ciąg znaków i przesunięcie bajtów w miejscu, w którym został znaleziony.
Innymi słowy, szukam jakiegoś narzędzia, które działa tak:
tool foobar filename
lub
tool foobar < filename
a jego produkcja jest mniej więcej tak:
foobar:10
foobar:410
foobar:810
foobar:1210
...
na przykład ciąg, który pasował i przesunięcie bajtowe w pliku, w którym rozpoczęło się dopasowanie. W tym przykładowym przypadku mogę wywnioskować, że każdy rekord ma długość 400 bajtów.
Inne ograniczenia:
- Możliwość wyszukiwania przez regex jest cool, ale nie trzeba go do tego problemu
- Moje pliki binarne są duże (3.5GB), więc chciałbym w miarę możliwości unikaj czytania całego pliku w pamięci.
argv! Nie wiem, w którym momencie moje opanowanie gramatyki angielskiej ześlizgnęło się w błoto. Dzięki za naprawienie tego dla mnie @Kevin – mgilson