LINUX.ORG.RU

В бинарном файле удалить все совпадающие с «эталоном» куски


0

0

Есть кусок (48 байт) бинарного кода, и есть другой БОЛЬШОЙ бинарный файл. Нужно в БОЛЬШОМ файле удалить все эти повторяющиеся по 48 байт «кусочки».

Организовать это типа в пайпе: БОЛЬШОЙ файл | фильтр | новый БОЛЬШОЙ файл

Признателен за мысли по этому поводу ...

★★★
Ответ на: комментарий от Komintern

тут можно даже тупо grep заюзать :

cat большой_файл | grep -ov -f эталонный_файл > новый_файл

только насчет опции -f - яхз, как оно в бинарном режиме работать будет.

isden ★★★★★
()

Делать cat на бинарный файл, мне кажется, крайне плохой идеей. Есть же hexdump, к примеру, с опцией -C и грепать по нормальным символам (16-ричным кодам).

Bebop ★★
()
Ответ на: комментарий от Komintern

> cat большой_файл | sed s/«эталон»/«»/ > новый_файл

чтот не получается, эталон у меня бинарный файл 48 байт, что мне между «» писать?

papay ★★★
() автор топика
Ответ на: комментарий от isden

> только насчет опции -f - яхз, как оно в бинарном режиме работать будет.

не будет:( я уже пробовал, и снова попробовал, на выходе файл нулевого размера.

papay ★★★
() автор топика
Ответ на: комментарий от Bebop

> Делать cat на бинарный файл, мне кажется, крайне плохой идеей.

почему? вполне нормально работает.

isden ★★★★★
()

А по теме, когда у меня винт сдох, после восстановления у меня была куча файлов с битыми секторами, в которых была куча нулей бинарных. Искал я их грепом, но как-то хитро, через перловые регексы, что ли... Указывал образец то ли в хексе, то ли в окте, не вспомню сейчас. В манах нарыл.

vga ★★
()
Ответ на: комментарий от vga

>>Делать cat мне кажется крайне плохой идеей.

FIXED

grep regex file > out.bin

sed s/regex/repl/ file > out.bin

Раскройте мысль?! Как по этой схеме прогрепать бинаный кусок, к примеру, в 10 КБ в файле размером 200 ГБ ?

Bebop ★★
()

Я бы на вашем месте уже програмку свою написал). Задача впринципе не сложная. Нужно всеголишь читать большой файл фрагментами как последние 47 байт из прошлого фрагмента+ текущий. Далее исключить совпадения с шаблоном и записать в исходный файл.

anonymous
()
Ответ на: комментарий от Bebop

Погребать бинарный кусок - выше ссылка. А здесь я всего лишь хотел сказать, что cat - не нужен.

vga ★★
()
Ответ на: комментарий от sdio

Делаю так,

cat BIG_file | xxd -ps | tr -d '\n' | sed 's/$(cat SMALL_file | xxd -ps | tr -d '\n')//g' | xxd -r -ps > new_BIG_file

не сэдит, на выходе тож самое :(

P.S. freeBSD 8.0

papay ★★★
() автор топика
Ответ на: комментарий от sdio

да, наверное...

Извини, но я тут уже пошел другим путем и решил без обработки бинарника. Нет времени на этом застопориваться.

Спасибо за участие

papay ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.