bbe - binary block editor
bbe is a sed-like editor for binary files. It performs
binary transformations on the blocks of input stream.
bbe 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 output.
- -s,
--suppress
- Suppress normal output, print only block contents.
- -?, --help
- List all available options and their meanings.
- -V, --version
- Show version of program.
BLOCK can be defined as:
- N:M
- Where N'th byte starts a M bytes long block (first byte is
0).
- :M
- Block length in input stream is M.
- /start/:M
- String start starts M bytes long block.
- /start/:/stop/
- String start starts the block and block ends at string
stop.
- /start/:
- String start starts the block and block will end at next occurrence
of start. Only the first start is included to the
block.
- :/stop/
- 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.
Both start and stop strings are included in block.
Nonprintable characters can be escaped as
- \nnn
- decimal
- \xnn
- hexadecimal
- \0nnn
- octal
Character '\' can be escaped as '\\'. Escape codes
'\a','\b','\t','\n','\v','\f','\r' and '\;' can also be used.
Length (N and M) can be defined as a decimal (n), a
hexadecimal (xn) or an octal (0n) value.
bbe 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 command.
- L n
- Leave all blocks unmodified starting from block number n. Affects
only commands after this command.
- N
- 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 are
printed.
- < file
- After printing a block, the contents of file file are printed.
n 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
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.
- s/search/replace/
- Replace all occurrences of search with replace.
- y/source/dest/
- Translate bytes in source to the corresponding bytes in
dest. Source and dest must be the same length.
- d n m|*
- Delete m bytes starting from the offset n. If * is defined
instead of m, then all bytes starting from n are
deleted.
- 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 zeroes.
- & 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.
- x
- Exchange the contents of nibbles (half an octet) of bytes.
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.
Timo Savinen <tjsa@iki.fi >