xref: /vim-8.2.3635/runtime/doc/xxd.man (revision 2bf24176)
1XXD(1)                      General Commands Manual                     XXD(1)
2
3
4
5NAME
6       xxd - make a hexdump or do the reverse.
7
8SYNOPSIS
9       xxd -h[elp]
10       xxd [options] [infile [outfile]]
11       xxd -r[evert] [options] [infile [outfile]]
12
13DESCRIPTION
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
20OPTIONS
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.
46
47       -E | -EBCDIC
48              Change the character encoding in the righthand column from ASCII
49              to EBCDIC.  This does not change the hexadecimal representation.
50              The option is meaningless in combinations with -r, -p or -i.
51
52       -e     Switch to little-endian hexdump.  This option treats byte groups
53              as words in little-endian byte order.  The default grouping of 4
54              bytes may be changed using -g.  This option only applies to hex‐
55              dump,  leaving  the  ASCII (or EBCDIC) representation unchanged.
56              The command line switches -r, -p, -i do not work with this mode.
57
58       -g bytes | -groupsize bytes
59              separate the output of every <bytes> bytes (two  hex  characters
60              or eight bit-digits each) by a whitespace.  Specify -g 0 to sup‐
61              press grouping.  <Bytes> defaults to 2 in normal mode, 4 in lit‐
62              tle-endian  mode and 1 in bits mode.  Grouping does not apply to
63              postscript or include style.
64
65       -h | -help
66              print a summary of available commands and exit.  No hex  dumping
67              is performed.
68
69       -i | -include
70              output  in C include file style. A complete static array defini‐
71              tion is written (named after the input file), unless  xxd  reads
72              from stdin.
73
74       -l len | -len len
75              stop after writing <len> octets.
76
77       -o offset
78              add <offset> to the displayed file position.
79
80       -p | -ps | -postscript | -plain
81              output  in  postscript  continuous  hexdump style. Also known as
82              plain hexdump style.
83
84       -r | -revert
85              reverse operation: convert (or patch) hexdump into  binary.   If
86              not  writing  to stdout, xxd writes into its output file without
87              truncating it. Use the combination -r -p to read plain hexadeci‐
88              mal dumps without line number information and without a particu‐
89              lar column layout. Additional  Whitespace  and  line-breaks  are
90              allowed anywhere.
91
92       -seek offset
93              When used after -r: revert with <offset> added to file positions
94              found in hexdump.
95
96       -s [+][-]seek
97              start at <seek> bytes abs. (or rel.) infile offset.  + indicates
98              that  the  seek  is  relative to the current stdin file position
99              (meaningless when not reading from stdin).  - indicates that the
100              seek  should  be  that many characters from the end of the input
101              (or if combined with +: before the current stdin file position).
102              Without -s option, xxd starts at the current file position.
103
104       -u     use upper case hex letters. Default is lower case.
105
106       -v | -version
107              show version string.
108
109CAVEATS
110       xxd -r has some builtin magic while evaluating line number information.
111       If the output file is seekable, then the linenumbers at  the  start  of
112       each  hexdump  line may be out of order, lines may be missing, or over‐
113       lapping. In these cases xxd will lseek(2) to the next position. If  the
114       output  file  is  not  seekable,  only  gaps are allowed, which will be
115       filled by null-bytes.
116
117       xxd -r never generates parse errors. Garbage is silently skipped.
118
119       When editing hexdumps, please note that xxd -r skips everything on  the
120       input line after reading enough columns of hexadecimal data (see option
121       -c). This also means, that changes to the printable ascii  (or  ebcdic)
122       columns  are  always  ignored.  Reverting a plain (or postscript) style
123       hexdump with xxd -r -p does not depend on the correct  number  of  col‐
124       umns.  Here  anything  that  looks  like a pair of hex-digits is inter‐
125       preted.
126
127       Note the difference between
128       % xxd -i file
129       and
130       % xxd -i < file
131
132       xxd -s +seek may be different from xxd -s seek, as lseek(2) is used  to
133       "rewind" input.  A '+' makes a difference if the input source is stdin,
134       and if stdin's file position is not at the start of  the  file  by  the
135       time  xxd  is  started and given its input.  The following examples may
136       help to clarify (or further confuse!)...
137
138       Rewind stdin before reading; needed because the `cat' has already  read
139       to the end of stdin.
140       % sh -c "cat > plain_copy; xxd -s 0 > hex_copy" < file
141
142       Hexdump  from  file  position  0x480 (=1024+128) onwards.  The `+' sign
143       means "relative to the current position", thus the `128' adds to the 1k
144       where dd left off.
145       %  sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet"
146       < file
147
148       Hexdump from file position 0x100 ( = 1024-768) on.
149       % sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet"
150       < file
151
152       However,  this is a rare situation and the use of `+' is rarely needed.
153       The author prefers to monitor the  effect  of  xxd  with  strace(1)  or
154       truss(1), whenever -s is used.
155
156EXAMPLES
157       Print everything but the first three lines (hex 0x30 bytes) of file.
158       % xxd -s 0x30 file
159
160       Print 3 lines (hex 0x30 bytes) from the end of file.
161       % xxd -s -0x30 file
162
163       Print 120 bytes as continuous hexdump with 20 octets per line.
164       % xxd -l 120 -ps -c 20 xxd.1
165       2e54482058584420312022417567757374203139
166       39362220224d616e75616c207061676520666f72
167       20787864220a2e5c220a2e5c222032317374204d
168       617920313939360a2e5c22204d616e2070616765
169       20617574686f723a0a2e5c2220202020546f6e79
170       204e7567656e74203c746f6e79407363746e7567
171
172       Hexdump the first 120 bytes of this man page with 12 octets per line.
173       % xxd -l 120 -c 12 xxd.1
174       0000000: 2e54 4820 5858 4420 3120 2241  .TH XXD 1 "A
175       000000c: 7567 7573 7420 3139 3936 2220  ugust 1996"
176       0000018: 224d 616e 7561 6c20 7061 6765  "Manual page
177       0000024: 2066 6f72 2078 7864 220a 2e5c   for xxd"..\
178       0000030: 220a 2e5c 2220 3231 7374 204d  "..\" 21st M
179       000003c: 6179 2031 3939 360a 2e5c 2220  ay 1996..\"
180       0000048: 4d61 6e20 7061 6765 2061 7574  Man page aut
181       0000054: 686f 723a 0a2e 5c22 2020 2020  hor:..\"
182       0000060: 546f 6e79 204e 7567 656e 7420  Tony Nugent
183       000006c: 3c74 6f6e 7940 7363 746e 7567  <tony@sctnug
184
185       Display just the date from the file xxd.1
186       % xxd -s 0x36 -l 13 -c 13 xxd.1
187       0000036: 3231 7374 204d 6179 2031 3939 36  21st May 1996
188
189       Copy input_file to output_file and prepend 100 bytes of value 0x00.
190       % xxd input_file | xxd -r -s 100 > output_file
191
192       Patch the date in the file xxd.1
193       % echo "0000037: 3574 68" | xxd -r - xxd.1
194       % xxd -s 0x36 -l 13 -c 13 xxd.1
195       0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996
196
197       Create  a  65537 byte file with all bytes 0x00, except for the last one
198       which is 'A' (hex 0x41).
199       % echo "010000: 41" | xxd -r > file
200
201       Hexdump this file with autoskip.
202       % xxd -a -c 12 file
203       0000000: 0000 0000 0000 0000 0000 0000  ............
204       *
205       000fffc: 0000 0000 40                   ....A
206
207       Create a 1 byte file containing a single  'A'  character.   The  number
208       after '-r -s' adds to the linenumbers found in the file; in effect, the
209       leading bytes are suppressed.
210       % echo "010000: 41" | xxd -r -s -0x10000 > file
211
212       Use xxd as a filter within an editor such as vim(1) to hexdump a region
213       marked between `a' and `z'.
214       :'a,'z!xxd
215
216       Use xxd as a filter within an editor such as vim(1) to recover a binary
217       hexdump marked between `a' and `z'.
218       :'a,'z!xxd -r
219
220       Use xxd as a filter within an editor such as vim(1) to recover one line
221       of a hexdump.  Move the cursor over the line and type:
222       !!xxd -r
223
224       Read single characters from a serial line
225       % xxd -c1 < /dev/term/b &
226       % stty < /dev/term/b -echo -opost -isig -icanon min 1
227       % echo -n foo > /dev/term/b
228
229RETURN VALUES
230       The following error values are returned:
231
232       0      no errors encountered.
233
234       -1     operation not supported ( xxd -r -i still impossible).
235
236       1      error while parsing options.
237
238       2      problems with input file.
239
240       3      problems with output file.
241
242       4,5    desired seek position is unreachable.
243
244SEE ALSO
245       uuencode(1), uudecode(1), patch(1)
246
247WARNINGS
248       The  tools  weirdness matches its creators brain.  Use entirely at your
249       own risk. Copy files. Trace it. Become a wizard.
250
251VERSION
252       This manual page documents xxd version 1.7
253
254AUTHOR
255       (c) 1990-1997 by Juergen Weigert
256       <[email protected]>
257
258       Distribute freely and credit me,
259       make money and share with me,
260       lose money and don't ask me.
261
262       Manual page started by Tony Nugent
263       <[email protected]> <[email protected]>
264       Small changes by Bram Moolenaar.  Edited by Juergen Weigert.
265
266Manual page for xxd               August 1996                           XXD(1)
267