How do you write specific bytes to a file?
You can use echo -e
:
echo -e "\x66\x6f\x6f"
Do note that hexdump -C
is what you want to dump the contents of the file in byte order instead of being interpreted as 4-byte words in network byte order.
This is the hexundump
script from my personal collection:
#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
tr/0-9A-Fa-f//cd;
if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
if (length($_) & 1) { s/(.)$//; $c = $1; }
print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }
Simulate a byte train:
echo 41 42 43 44 |
Change spaces into newlines so the while/read can easily parse them on by one
tr ' ' '\n' |
Parse byte by byte
while read hex; do
Convert hex to ascii:
printf \\x$hex
until end of input
done
If the files to parse are seriously big, you probably don't want to use bash because it is slow. PERL for example would be a better choice.