Tôi đã cố gắng thực hiện thay thế sed
trong tệp nhị phân tuy nhiên tôi bắt đầu tin rằng điều đó là không thể. Về cơ bản những gì tôi muốn làm là tương tự như sau:thay thế sed nhị phân
sed -bi "s/\(\xFF\xD8[[:xdigit:]]\{1,\}\xFF\xD9\)/\1/" file.jpg
Logic tôi muốn đạt được là: quét qua một tập tin nhị phân cho đến khi mã hex FFD8
, tiếp tục đọc cho đến khi FFD9
, và chỉ lưu những gì là giữa chúng (loại bỏ rác trước và sau, nhưng bao gồm FFD8
và FFD9
là phần đã lưu của tệp)
Có cách nào tốt để làm điều này không? Ngay cả khi không sử dụng sed
?
EDIT: Tôi chỉ đang chơi xung quanh và tìm thấy cách sạch nhất để làm điều đó IMO. Tôi biết rằng tuyên bố grep này sẽ hành động tham lam.
hexdump -ve '1/1 "%.2x"' dirty.jpg | grep -o "ffd8.*ffd9" | xxd -r -p > clean.jpg
Luôn coi chừng các kết quả trùng khớp sai khi grepping cho các mẫu về dữ liệu cơ bản ngẫu nhiên, chẳng hạn như luồng nhị phân nén! – dwarring
@snoopy - (1) có giải pháp tốt hơn không? (2) nếu không, cần phải làm gì để cải thiện điều này? Ngừng tìm kiếm khi một số "cuối siêu dữ liệu" được truy cập? – DVK
Phụ thuộc chính xác những gì bạn đang làm nhưng mô-đun CPAN Image :: EXIF cho phép bạn trích xuất và thay đổi siêu dữ liệu. Có thể sử dụng ở đây. – dwarring