xxd [options] [infile [outfile]]
xxd -r[evert] [options] [infile [outfile]]
xxd -h[elp]
Treats input as binary, creates an ASCII hex dump or convert an ASCII hex dump to binary.
> ls -log numbersAndLetters.txt -rw-r----- 1 65 May 4 2012 numbersAndLetters.txt > cat numbersAndLetters.txt 0123456789 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ > xxd numbersAndLetters.txt 0000000: 3031 3233 3435 3637 3839 2061 6263 6465 0123456789 abcde 0000010: 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 fghijklmnopqrstu 0000020: 7677 7879 7a20 4142 4344 4546 4748 494a vwxyz ABCDEFGHIJ 0000030: 4b4c 4d4e 4f50 5152 5354 5556 5758 595a KLMNOPQRSTUVWXYZ 0000040: 0a .If
infile
/outfile
is specified as -
or if none is given stdin/stdout is used .
Only the first option letter is used, unless the option is followed by a parameter.
Spaces between a single option letter and its parameter are optional.
Parameters can be specified in decimal, hexadecimal or octal -c8, -c 8, -c 010 and -cols 8
are equivalent.
-u |
Useful for transmission binary data in `mail-safe' ASCII, like uuencode. Has the advantage of decoding to standard output.
It can be used to perform binary file patching.
-revert
lseek
to the next position.
-revert
never generates parse errors. Garbage is silently skipped.
-refert
skips everything on the input line after reading enough columns of hexadecimal data (see -cols
).
changes to the printable text columns are always ignored.
Reverting a plain
hexdump with -plain
does not depend on the correct number of columns.
Anything that looks like a pair of hex-digits is interpreted.
Note the difference between
xxd -include file
and
xxd -include < file stdin
> xxd -include numbersAndLetters.txt
unsigned char numbersAndLetters_txt[] = {
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x20, 0x61,
0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
0x7a, 0x20, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
0x57, 0x58, 0x59, 0x5a, 0x0a
};
unsigned int numbersAndLetters_txt_len = 65;
> xxd -include < numbersAndLetters.txt
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x20, 0x61,
0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d,
0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
0x7a, 0x20, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
0x57, 0x58, 0x59, 0x5a, 0x0a
-s +seek
may be different from -s seek
,
as lseek(2) is used to position the input. +
makes a difference if the input source is stdin, and it's position is not at the start of the file when xxd
is started and given its input.
cat
stdin to plain_copy, then position stdin to the beginning (needed because the cat
has read to the end of stdin).
% sh -c "cat > plain_copy; xxd -s 0 > hex_copy < file"
dd
one 1K block then hexdump from file position 0x480 (=1024+128) onwards.
The +
means "relative to the current position", thus the `128' adds to the 1k where dd
left off.
% sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet" < fileHexdump from file position 0x100 ( = 1024-768) on.
% sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet" < filethis is a rare situation and the use of `+' is rarely needed. monitor the effect of xxd with strace(1) or truss(1), whenever -s is used.
Output everything but the first three lines (hex 0x30 bytes) of file.
% xxd -s 0x30 fileOutput 3 lines (hex 0x30 bytes) from the end of file.
% xxd -s -0x30 fileOutput 120 bytes as continuous hexdump with 20 octets per line.
% xxd -len 120 -ps -cols 20 xxd.1 2e54482058584420312022417567757374203139 39362220224d616e75616c207061676520666f72 20787864220a2e5c220a2e5c222032317374204d 617920313939360a2e5c22204d616e2070616765 20617574686f723a0a2e5c2220202020546f6e79 204e7567656e74203c746f6e79407363746e7567Hexdump the first 120 bytes of this man page with 12 octets per line.
% xxd -len 120 -cols 12 xxd.1 0000000: 2e54 4820 5858 4420 3120 2241 .TH XXD 1 "A 000000c: 7567 7573 7420 3139 3936 2220 ugust 1996" 0000018: 224d 616e 7561 6c20 7061 6765 "Manual page 0000024: 2066 6f72 2078 7864 220a 2e5c for xxd"..\ 0000030: 220a 2e5c 2220 3231 7374 204d "..\" 21st M 000003c: 6179 2031 3939 360a 2e5c 2220 ay 1996..\" 0000048: 4d61 6e20 7061 6765 2061 7574 Man page aut 0000054: 686f 723a 0a2e 5c22 2020 2020 hor:..\" 0000060: 546f 6e79 204e 7567 656e 7420 Tony Nugent 000006c: 3c74 6f6e 7940 7363 746e 7567 <tony@sctnugDisplay just the date from the file xxd.1
% xxd -s 0x36 -len 13 -cols 13 xxd.1 0000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996Copy input_file to output_file and prepend 100 bytes of value 0x00.
% xxd input_file | xxd -r -s 100 > output_filePatch the date in the file xxd.1
% echo "0000037: 3574 68" xxd -r - xxd.1 # 3574 68 (c= 5th % xxd -s 0x36 -len 13 -cols 13 xxd.1 0000036: 3235 7468 204d 6179 2031 3939 36 25th May 1996Create a 65537 byte file with all bytes 0x00, except for the last one which is 'A' (hex 0x41).
% echo "010000: 41" | xxd -r > file Hexdump that file with autoskip.% xxd -a -cols 12 file 0000000: 0000 0000 0000 0000 0000 0000 ............ * 000fffc: 0000 0000 40 ....ACreate a 1 byte file containing a single 'A' character. The number after '-r -s' adds to the linenumbers found in the file; in effect, the leading bytes are suppressed.% echo "010000: 41" | xxd -r -s -0x10000 > fileUse xxd as a filter within an editor such as vim(1) to hexdump a region marked between `a' and `z'.:'a,'z!xxdUse xxd as a filter within an editor to recover a binary hexdump marked between `a' and `z'.:'a,'z!xxd -rUse xxd as a filter within an editor to recover one line of a hexdump. Move the cursor over the line and type:!!xxd -rCreate a C include:xxd -i samp 0000.c cat 0000.c unsigned char samp[] = { 0x20, 0x41, 0x46, 0x4b, 0x50, 0x55, 0x5a, 0x0a, 0x20, 0x42, 0x47, 0x4c, 0x51, 0x56, 0x0a, 0x20, 0x43, 0x48, 0x4d, 0x52, 0x57, 0x0a, 0x20, 0x44, 0x49, 0x4e, 0x53, 0x58, 0x0a, 0x20, 0x45, 0x4a, 0x4f, 0x54, 0x59, 0x3a, 0x58, 0x0a, 0x0a }; unsigned int samp_len = 39;Read single characters from a serial line% xxd -cols 1 < /dev/term/b & % stty < /dev/term/b -echo -opost -isig -icanon min 1 % echo -n foo > /dev/term/bReturn Values
0 no errors encountered. -1 operation not supported ( xxd -revert -include) 1 error while parsing options. 2 problems with input file. 3 problems with output file. 4,5 desired seek position is unreachable.SEE ALSO
uuencode(1), uudecode(1), patch(1)