I was attempting to do a sed
replacement in a binary file however I am beginning to believe that is not possible. Essentially what I wanted to do was similar to the following:
sed -bi "s/(xFFxD8[[:xdigit:]]{1,}xFFxD9)/1/" file.jpg
The logic I wish to achieve is: scan through a binary file until the hex code FFD8
, continue reading until FFD9
, and only save what was between them (discards the junk before and after, but include FFD8
and FFD9
as the saved part of the file)
Is there a good way to do this? Even if not using sed
?
EDIT: I just was playing around and found the cleanest way to do it IMO. I am aware that this grep statement will act greedy.
hexdump -ve '1/1 "%.2x"' dirty.jpg | grep -o "ffd8.*ffd9" | xxd -r -p > clean.jpg
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…