1XXD(1)                      General Commands Manual                     XXD(1)
2
3
4

NAME

6       xxd - make a hexdump or do the reverse.
7

SYNOPSIS

9       xxd -h[elp]
10       xxd [options] [infile [outfile]]
11       xxd -r[evert] [options] [infile [outfile]]
12

DESCRIPTION

14       xxd  creates a hex dump of a given file or standard input.  It can also
15       convert a hex dump back to its original binary form.  Like  uuencode(1)
16       and  uudecode(1)  it allows the transmission of binary data in a `mail-
17       safe' ASCII representation, but has the advantage of decoding to  stan‐
18       dard output.  Moreover, it can be used to perform binary file patching.
19

OPTIONS

21       If  no infile is given, standard input is read.  If infile is specified
22       as a `-' character, then input is taken from  standard  input.   If  no
23       outfile is given (or a `-' character is in its place), results are sent
24       to standard output.
25
26       Note that a "lazy" parser is used which does not check  for  more  than
27       the  first option letter, unless the option is followed by a parameter.
28       Spaces between a single option letter and its parameter  are  optional.
29       Parameters to options can be specified in decimal, hexadecimal or octal
30       notation.  Thus -c8, -c 8, -c 010 and -cols 8 are all equivalent.
31
32       -a | -autoskip
33              Toggle autoskip: A single '*' replaces nul-lines.  Default off.
34
35       -b | -bits
36              Switch to bits (binary digits) dump, rather than hexdump.   This
37              option  writes octets as eight digits "1"s and "0"s instead of a
38              normal hexadecimal dump. Each line is preceded by a line  number
39              in  hexadecimal and followed by an ascii (or ebcdic) representa‐
40              tion. The command line switches -r, -p, -i do not work with this
41              mode.
42
43       -c cols | -cols cols
44              Format  <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b:
45              6). Max 256.  No maxmimum for -ps. With -ps, 0  results  in  one
46              long line of output.
47
48       -C | -capitalize
49              Capitalize  variable  names  in C include file style, when using
50              -i.
51
52       -E | -EBCDIC
53              Change the character encoding in the righthand column from ASCII
54              to EBCDIC.  This does not change the hexadecimal representation.
55              The option is meaningless in combinations with -r, -p or -i.
56
57       -e     Switch to little-endian hexdump.  This option treats byte groups
58              as words in little-endian byte order.  The default grouping of 4
59              bytes may be changed using -g.  This option only applies to hex‐
60              dump,  leaving  the  ASCII (or EBCDIC) representation unchanged.
61              The command line switches -r, -p, -i do not work with this mode.
62
63       -g bytes | -groupsize bytes
64              Separate the output of every <bytes> bytes (two  hex  characters
65              or eight bit-digits each) by a whitespace.  Specify -g 0 to sup‐
66              press grouping.  <Bytes> defaults to 2 in normal mode, 4 in lit‐
67              tle-endian  mode and 1 in bits mode.  Grouping does not apply to
68              postscript or include style.
69
70       -h | -help
71              Print a summary of available commands and exit.  No hex  dumping
72              is performed.
73
74       -i | -include
75              Output  in C include file style. A complete static array defini‐
76              tion is written (named after the input file), unless  xxd  reads
77              from stdin.
78
79       -l len | -len len
80              Stop after writing <len> octets.
81
82       -n name  |  -name name
83              Override  the variable name output when -i is used. The array is
84              named name and the length is named name_len.
85
86       -o offset
87              Add <offset> to the displayed file position.
88
89       -p | -ps | -postscript | -plain
90              Output in postscript continuous hexdump  style.  Also  known  as
91              plain hexdump style.
92
93       -r | -revert
94              Reverse  operation:  convert (or patch) hexdump into binary.  If
95              not writing to stdout, xxd writes into its output  file  without
96              truncating it. Use the combination -r -p to read plain hexadeci‐
97              mal dumps without line number information and without a particu‐
98              lar column layout. Additional Whitespace and line-breaks are al‐
99              lowed anywhere.
100
101       -seek offset
102              When used after -r: revert with <offset> added to file positions
103              found in hexdump.
104
105       -s [+][-]seek
106              Start at <seek> bytes abs. (or rel.) infile offset.  + indicates
107              that the seek is relative to the  current  stdin  file  position
108              (meaningless when not reading from stdin).  - indicates that the
109              seek should be that many characters from the end  of  the  input
110              (or if combined with +: before the current stdin file position).
111              Without -s option, xxd starts at the current file position.
112
113       -u     Use upper case hex letters. Default is lower case.
114
115       -v | -version
116              Show version string.
117

CAVEATS

119       xxd -r has some builtin magic while evaluating line number information.
120       If  the  output  file is seekable, then the linenumbers at the start of
121       each hexdump line may be out of order, lines may be missing,  or  over‐
122       lapping.  In these cases xxd will lseek(2) to the next position. If the
123       output file is not seekable, only  gaps  are  allowed,  which  will  be
124       filled by null-bytes.
125
126       xxd -r never generates parse errors. Garbage is silently skipped.
127
128       When  editing hexdumps, please note that xxd -r skips everything on the
129       input line after reading enough columns of hexadecimal data (see option
130       -c).  This  also means, that changes to the printable ascii (or ebcdic)
131       columns are always ignored. Reverting a  plain  (or  postscript)  style
132       hexdump  with  xxd  -r -p does not depend on the correct number of col‐
133       umns. Here anything that looks like a  pair  of  hex-digits  is  inter‐
134       preted.
135
136       Note the difference between
137       % xxd -i file
138       and
139       % xxd -i < file
140
141       xxd  -s +seek may be different from xxd -s seek, as lseek(2) is used to
142       "rewind" input.  A '+' makes a difference if the input source is stdin,
143       and  if  stdin's  file  position is not at the start of the file by the
144       time xxd is started and given its input.  The  following  examples  may
145       help to clarify (or further confuse!)...
146
147       Rewind  stdin before reading; needed because the `cat' has already read
148       to the end of stdin.
149       % sh -c "cat > plain_copy; xxd -s 0 > hex_copy" < file
150
151       Hexdump from file position 0x480 (=1024+128)  onwards.   The  `+'  sign
152       means "relative to the current position", thus the `128' adds to the 1k
153       where dd left off.
154       % sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 >  hex_snippet"
155       < file
156
157       Hexdump from file position 0x100 ( = 1024-768) on.
158       % sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet"
159       < file
160
161       However, this is a rare situation and the use of `+' is rarely  needed.
162       The  author  prefers  to  monitor  the  effect of xxd with strace(1) or
163       truss(1), whenever -s is used.
164

EXAMPLES

166       Print everything but the first three lines (hex 0x30 bytes) of file.
167       % xxd -s 0x30 file
168
169       Print 3 lines (hex 0x30 bytes) from the end of file.
170       % xxd -s -0x30 file
171
172       Print 120 bytes as continuous hexdump with 20 octets per line.
173       % xxd -l 120 -ps -c 20 xxd.1
174       2e54482058584420312022417567757374203139
175       39362220224d616e75616c207061676520666f72
176       20787864220a2e5c220a2e5c222032317374204d
177       617920313939360a2e5c22204d616e2070616765
178       20617574686f723a0a2e5c2220202020546f6e79
179       204e7567656e74203c746f6e79407363746e7567
180
181       Hexdump the first 120 bytes of this man page with 12 octets per line.
182       % xxd -l 120 -c 12 xxd.1
183       0000000: 2e54 4820 5858 4420 3120 2241  .TH XXD 1 "A
184       000000c: 7567 7573 7420 3139 3936 2220  ugust 1996"
185       0000018: 224d 616e 7561 6c20 7061 6765  "Manual page
186       0000024: 2066 6f72 2078 7864 220a 2e5c   for xxd"..\
187       0000030: 220a 2e5c 2220 3231 7374 204d  "..\" 21st M
188       000003c: 6179 2031 3939 360a 2e5c 2220  ay 1996..\"
189       0000048: 4d61 6e20 7061 6765 2061 7574  Man page aut
190       0000054: 686f 723a 0a2e 5c22 2020 2020  hor:..\"
191       0000060: 546f 6e79 204e 7567 656e 7420  Tony Nugent
192       000006c: 3c74 6f6e 7940 7363 746e 7567  <tony@sctnug
193
194       Display just the date from the file xxd.1
195       % xxd -s 0x36 -l 13 -c 13 xxd.1
196       0000036: 3231 7374 204d 6179 2031 3939 36  21st May 1996
197
198       Copy input_file to output_file and prepend 100 bytes of value 0x00.
199       % xxd input_file | xxd -r -s 100 > output_file
200
201       Patch the date in the file xxd.1
202       % echo "0000037: 3574 68" | xxd -r - xxd.1
203       % xxd -s 0x36 -l 13 -c 13 xxd.1
204       0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996
205
206       Create a 65537 byte file with all bytes 0x00, except for the  last  one
207       which is 'A' (hex 0x41).
208       % echo "010000: 41" | xxd -r > file
209
210       Hexdump this file with autoskip.
211       % xxd -a -c 12 file
212       0000000: 0000 0000 0000 0000 0000 0000  ............
213       *
214       000fffc: 0000 0000 40                   ....A
215
216       Create a 1 byte file containing a single 'A' character.  The number af‐
217       ter '-r -s' adds to the linenumbers found in the file; in  effect,  the
218       leading bytes are suppressed.
219       % echo "010000: 41" | xxd -r -s -0x10000 > file
220
221       Use xxd as a filter within an editor such as vim(1) to hexdump a region
222       marked between `a' and `z'.
223       :'a,'z!xxd
224
225       Use xxd as a filter within an editor such as vim(1) to recover a binary
226       hexdump marked between `a' and `z'.
227       :'a,'z!xxd -r
228
229       Use xxd as a filter within an editor such as vim(1) to recover one line
230       of a hexdump.  Move the cursor over the line and type:
231       !!xxd -r
232
233       Read single characters from a serial line
234       % xxd -c1 < /dev/term/b &
235       % stty < /dev/term/b -echo -opost -isig -icanon min 1
236       % echo -n foo > /dev/term/b
237

RETURN VALUES

239       The following error values are returned:
240
241       0      no errors encountered.
242
243       -1     operation not supported ( xxd -r -i still impossible).
244
245       1      error while parsing options.
246
247       2      problems with input file.
248
249       3      problems with output file.
250
251       4,5    desired seek position is unreachable.
252

SEE ALSO

254       uuencode(1), uudecode(1), patch(1)
255

WARNINGS

257       The tools weirdness matches its creators brain.  Use entirely  at  your
258       own risk. Copy files. Trace it. Become a wizard.
259

VERSION

261       This manual page documents xxd version 1.7
262

AUTHOR

264       (c) 1990-1997 by Juergen Weigert
265       <jnweiger@informatik.uni-erlangen.de>
266
267       Distribute freely and credit me,
268       make money and share with me,
269       lose money and don't ask me.
270
271       Manual page started by Tony Nugent
272       <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
273       Small changes by Bram Moolenaar.  Edited by Juergen Weigert.
274
275Manual page for xxd               August 1996                           XXD(1)
Impressum