bbe - binary block editor
is a sed-like editor for binary files. It performs binary
transformations on the blocks of input stream.
accepts the following options:
- -b, --block=BLOCK
- Block definition.
- -e, --expression=COMMAND
- Add the COMMAND to the commands to be executed.
- -f, --file=script-file
- Add the contents of script-file to commands.
- -o, --output=name
- Write output to name instead of standard
- -s, --suppress
- Suppress normal output, print only block contents.
- -?, --help
- List all available options and their meanings.
- -V, --version
- Show version of program.
can be defined as:
- Where N'th byte starts a M bytes long block
(first byte is 0).
- Block length in input stream is M.
- String start starts M bytes long block.
- String start starts the block and block ends at
- String start starts the block and block will end at
next occurrence of start. Only the first start is included
to the block.
- Block starts at the beginning of input stream (or at the
end of previous block) and ends at the next occurrence of stop.
String stop will be included to the block.
Special value '$' of M
means the end of stream.
Default value for block is 0:$, meaning the whole input stream.
strings are included in block. Nonprintable
characters can be escaped as
Character '\' can be escaped as '\\'. Escape codes
'\a','\b','\t','\n','\v','\f','\r' and '\;' can also be used.
Length ( N
) can be defined as a decimal (n), a hexadecimal
(xn) or an octal (0n) value.
has two type of commands: block and byte commands, both are always
related to current block. That means that the input stream outside of the
blocks remains untouched.
- D [n]
- Delete the n'th block. Without n, all found
blocks are deleted from the output stream.
- I string
- Insert the string string before the block.
- A string
- Append the string string at the end of block.
- J n
- Skip n blocks, before executing commands after this
- L n
- Leave all blocks unmodified starting from block number
n. Affects only commands after this command.
- Before printing a block, the file name in which the block
starts is printed.
- F f
- Before printing a block, the input stream offset at the
beginning of the block is printed. f can be H, D or O for
Hexadecimal, Decimal or Octal format of offset.
- B f
- Before printing a block, the block number is printed (first
block == 1) f can be H, D or O for Hexadecimal, Decimal or Octal
format of block number.
- > file
- Before printing a block, the contents of file file
- < file
- After printing a block, the contents of file file
in byte commands is the offset from the beginning of current block
(starts from zero).
- r n string
- Replace bytes starting at position n with string
- i n string
- Insert string starting at position n.
- p format
- The contents of block is printed in format defined by
format. format can have any of the formats H, D, O, A and B
for Hexadecimal, Decimal, Octal, Ascii and Binary.
- Replace all occurrences of search with
- Translate bytes in source to the corresponding bytes
in dest. Source and dest must be the same
- d n m|*
- Delete m bytes starting from the offset n. If
* is defined instead of m, then all bytes starting from n
- c from to
- Convert bytes from format from to to.
Currently supported formats are:
- BCD Binary coded decimal
- ASC Ascii
- j n
- Commands after the j-command are ignored for first n
bytes of the block.
- l n
- Commands after the l-command are ignored from n'th
byte of the block.
- w file
- Write bytes from the current block to file file.
Commands before w-command have what will be written. %B or %nB in
file will be replaced by current block number. n in %nB is field
length, leading zero in n causes the block number to be left padded with
- & c
- Performs binary and with c.
- | c
- Performs binary or with c.
- ^ c
- Performs binary xor with c.
- Performs binary negation.
- u n c
- All bytes from start of the block to offset n are
replaced by c.
- f n c
- All bytes starting from offset n to end of the block
are replaced by c.
- Exchange the contents of nibbles (half an octet) of
Nonvisible characters in strings can be escaped same way as in block definition
strings. Character '/' in s and y commands can be any visible character.
Note that the D, A, I, F, B, c, s, i, y, p, <, > and d commands cause the
length of input and output streams to be different.
- bbe -e
- all occurrences of "c:\temp\data1.txt" in file
file1 are changed to "c:\temp\data2.txt"
- bbe -b 0420:16 -e "r 4 \x12\x4a" file1
- Two bytes starting at fifth byte of a 16 byte long block
starting at offset 0420 (octal) in file1 are changed to hexadecimal values
12 and 4a.
- bbe -b :16 -e "A \x0a" file1
- Newline is added after every block, block length is 16.
Timo Savinen <email@example.com >