XXD(1)                                                                  XXD(1)



NAME
       xxd - make a hexdump or do the reverse.

SYNOPSIS
       xxd -h[elp]
       xxd [options] [infile [outfile]]
       xxd -r[evert] [options] [infile [outfile]]

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

OPTIONS
       If no infile is given, standard input is read.  If infile is  specified
       as  a  `-'  character,  then input is taken from standard input.  If no
       outfile is given (or a `-' character is in its place), results are sent
       to standard output.

       Note  that  a  "lazy" parser is used which does not check for more than
       the first option letter, unless the option is followed by a  parameter.
       Spaces  between  a single option letter and its parameter are optional.
       Parameters to options can be specified in decimal, hexadecimal or octal
       notation.  Thus -c8, -c 8, -c 010 and -cols 8 are all equivalent.


       -a | -autoskip
              toggle  autoskip: A single '*' replaces nul-lines.  Default off.

       -b | -bits
              Switch to bits (binary digits) dump, rather than hexdump.   This
              option  writes octets as eight digits "1"s and "0"s instead of a
              normal hexadecimal dump. Each line is preceded by a line  number
              in  hexadecimal and followed by an ascii (or ebcdic) representa-
              tion. The command line switches -r, -p, -i do not work with this
              mode.

       -c cols | -cols cols
              format  <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b:
              6). Max 256.

       -E | -EBCDIC
              Change the character encoding in the righthand column from ASCII
              to EBCDIC.  This does not change the hexadecimal representation.
              The option is meaningless in combinations with -r, -p or -i.

       -g bytes | -groupsize bytes
              separate the output of every <bytes> bytes (two  hex  characters
              or eight bit-digits each) by a whitespace.  Specify -g 0 to sup-
              press grouping.  <Bytes> defaults to 2 in normal mode and  1  in
              bits  mode.   Grouping  does  not apply to postscript or include
              style.

       -h | -help
              print a summary of available commands and exit.  No hex  dumping
              is performed.

       -i | -include
              output  in C include file style. A complete static array defini-
              tion is written (named after the input file), unless  xxd  reads
              from stdin.

       -l len | -len len
              stop after writing <len> octets.

       -p | -ps | -postscript | -plain
              output  in  postscript  continuous  hexdump style. Also known as
              plain hexdump style.

       -r | -revert
              reverse operation: convert (or patch) hexdump into  binary.   If
              not  writing  to stdout, xxd writes into its output file without
              truncating it. Use the combination -r -p to read plain hexadeci-
              mal dumps without line number information and without a particu-
              lar column layout. Additional  Whitespace  and  line-breaks  are
              allowed anywhere.

       -seek offset
              When used after -r: revert with <offset> added to file positions
              found in hexdump.

       -s [+][-]seek
              start at <seek> bytes abs. (or rel.) infile offset.   +  fRindi-
              cates  that the seek is relative to the current stdin file posi-
              tion (meaningless when not reading  from  stdin).   -  indicates
              that the seek should be that many characters from the end of the
              input (or if combined with +:  before  the  current  stdin  file
              position).   Without  -s  option, xxd starts at the current file
              position.

       -u     use upper case hex letters. Default is lower case.

       -v | -version
              show version string.

CAVEATS
       xxd -r has some builtin magic while evaluating line number information.
       If  the  output  file is seekable, then the linenumbers at the start of
       each hexdump line may be out of order, lines may be missing,  or  over-
       lapping.  In these cases xxd will lseek(2) to the next position. If the
       output file is not seekable, only  gaps  are  allowed,  which  will  be
       filled by null-bytes.

       xxd -r never generates parse errors. Garbage is silently skipped.

       When  editing hexdumps, please note that xxd -r skips everything on the
       input line after reading enough columns of hexadecimal data (see option
       -c).  This  also means, that changes to the printable ascii (or ebcdic)
       columns are always ignored. Reverting a  plain  (or  postscript)  style
       hexdump  with  xxd  -r -p does not depend on the correct number of col-
       umns. Here anything that looks like a  pair  of  hex-digits  is  inter-
       preted.

       Note the difference between
       % xxd -i file
       and
       % xxd -i < file

       xxd  -s +seek may be different from xxd -s seek, as lseek(2) is used to
       "rewind" input.  A '+' makes a difference if the input source is stdin,
       and  if  stdin's  file  position is not at the start of the file by the
       time xxd is started and given its input.  The  following  examples  may
       help to clarify (or further confuse!)...

       Rewind  stdin before reading; needed because the `cat' has already read
       to the end of stdin.
       % sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file

       Hexdump from file position 0x480 (=1024+128)  onwards.   The  `+'  sign
       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'
       < file

       Hexdump from file position 0x100 ( = 1024-768) on.
       % sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet'
       < file

       However, this is a rare situation and the use of `+' is rarely  needed.
       The  author  prefers  to  monitor  the  effect of xxd with strace(1) or
       truss(1), whenever -s is used.

EXAMPLES
       Print everything but the first three lines (hex 0x30 bytes) of file
       % xxd -s 0x30 file

       Print 3 lines (hex 0x30 bytes) from the end of file
       % xxd -s -0x30 file

       Print 120 bytes as continuous hexdump with 40 octets per line.
       % xxd -l 120 -ps -c 20 xxd.1
       2e54482058584420312022417567757374203139
       39362220224d616e75616c207061676520666f72
       20787864220a2e5c220a2e5c222032317374204d
       617920313939360a2e5c22204d616e2070616765
       20617574686f723a0a2e5c2220202020546f6e79
       204e7567656e74203c746f6e79407363746e7567

       Hexdump the first 120 bytes of this man page with 12 octets per line.
       % xxd -l 120 -c 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@sctnug

       Display just the date from the file xxd.1
       % xxd -s 0x36 -l 13 -c 13 xxd.1
       0000036: 3231 7374 204d 6179 2031 3939 36  21st May 1996

       Copy input_file to output_file and prepend 100 bytes of value 0x00.
       % xxd input_file | xxd -r -s 100 > output_file

       Patch the date in the file xxd.1
       % echo '0000037: 3574 68' | xxd -r - xxd.1
       % xxd -s 0x36 -l 13 -c 13 xxd.1
       0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996

       Create 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 this file with autoskip.
       % xxd -a -c 12 file
       0000000: 0000 0000 0000 0000 0000 0000  ............
       *
       000fffc: 0000 0000 40                   ....A

       Create  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 > file

       Use xxd as a filter within an editor such as vim(1) to hexdump a region
       marked between `a' and `z'.
       :'a,'z!xxd

       Use xxd as a filter within an editor such as vim(1) to recover a binary
       hexdump marked between `a' and `z'.
       :'a,'z!xxd -r

       Use xxd as a filter within an editor such as vim(1) to recover one line
       of a hexdump.  Move the cursor over the line and type:
       !!xxd -r

       Read single characters from a serial line
       % xxd -c1 < /dev/term/b &
       % stty < /dev/term/b -echo -opost -isig -icanon min 1
       % echo -n foo > /dev/term/b


RETURN VALUES
       The following error values are returned:

       0      no errors encountered.

       -1     operation not supported ( xxd -r -i still impossible).

       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)

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

VERSION
       This manual page documents xxd version 1.7

AUTHOR
       (c) 1990-1997 by Juergen Weigert
       <jnweiger@informatik.uni-erlangen.de>

       Distribute freely and credit me,
       make money and share with me,
       lose money and don't ask me.

       Manual page started by Tony Nugent
       <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
       Small changes by Bram Moolenaar.  Edited by Juergen Weigert.




Manual page for xxd               August 1996                           XXD(1)
