Provided by: manpages-posix_2017a-2_all bug

PROLOG

       This  manual  page  is part of the POSIX Programmer's Manual.  The Linux implementation of
       this interface may differ (consult the corresponding Linux  manual  page  for  details  of
       Linux behavior), or the interface may not be implemented on Linux.

NAME

       unexpand — convert spaces to tabs

SYNOPSIS

       unexpand [-a|-t tablist] [file...]

DESCRIPTION

       The  unexpand  utility  shall  copy files or standard input to standard output, converting
       <blank> characters at the beginning  of  each  line  into  the  maximum  number  of  <tab>
       characters  followed  by  the minimum number of <space> characters needed to fill the same
       column positions originally filled by  the  translated  <blank>  characters.  By  default,
       tabstops shall be set at every eighth column position. Each <backspace> shall be copied to
       the output, and shall  cause  the  column  position  count  for  tab  calculations  to  be
       decremented; the count shall never be decremented to a value less than one.

OPTIONS

       The unexpand utility shall conform to the Base Definitions volume of POSIX.1‐2017, Section
       12.2, Utility Syntax Guidelines.

       The following options shall be supported:

       -a        In addition to translating <blank> characters at the  beginning  of  each  line,
                 translate  all sequences of two or more <blank> characters immediately preceding
                 a tab stop to the maximum number of <tab> characters  followed  by  the  minimum
                 number of <space> characters needed to fill the same column positions originally
                 filled by the translated <blank> characters.

       -t tablist
                 Specify the tab stops. The application shall ensure  that  the  tablist  option-
                 argument is a single argument consisting of a single positive decimal integer or
                 multiple positive decimal integers, separated by <blank> or <comma>  characters,
                 in  ascending  order.  If  a  single  number is given, tabs shall be set tablist
                 column positions apart instead of the default 8. If multiple numbers are  given,
                 the tabs shall be set at those specific column positions.

                 The  application  shall ensure that each tab-stop position N is an integer value
                 greater than zero, and the list shall be in strictly ascending  order.  This  is
                 taken  to  mean  that, from the start of a line of output, tabbing to position N
                 shall cause the next character output to be in the (N+1)th  column  position  on
                 that  line.  When  the  -t  option  is  not  specified, the default shall be the
                 equivalent of specifying -t 8 (except for the  interaction  with  -a,  described
                 below).

                 No  <space>-to-<tab>  conversions shall occur for characters at positions beyond
                 the last of those specified in a multiple tab-stop list.

                 When -t is specified, the presence or absence of the -a option shall be ignored;
                 conversion shall not be limited to the processing of leading <blank> characters.

OPERANDS

       The following operand shall be supported:

       file      A pathname of a text file to be used as input.

STDIN

       See the INPUT FILES section.

INPUT FILES

       The input files shall be text files.

ENVIRONMENT VARIABLES

       The following environment variables shall affect the execution of unexpand:

       LANG      Provide a default value for the internationalization variables that are unset or
                 null.  (See  the  Base  Definitions  volume  of   POSIX.1‐2017,   Section   8.2,
                 Internationalization   Variables  for  the  precedence  of  internationalization
                 variables used to determine the values of locale categories.)

       LC_ALL    If set to a non-empty string  value,  override  the  values  of  all  the  other
                 internationalization variables.

       LC_CTYPE  Determine  the  locale for the interpretation of sequences of bytes of text data
                 as characters (for example, single-byte as opposed to multi-byte  characters  in
                 arguments  and input files), the processing of <tab> and <space> characters, and
                 for the determination of the width in  column  positions  each  character  would
                 occupy on an output device.

       LC_MESSAGES
                 Determine  the  locale  that should be used to affect the format and contents of
                 diagnostic messages written to standard error.

       NLSPATH   Determine the location of message catalogs for the processing of LC_MESSAGES.

ASYNCHRONOUS EVENTS

       Default.

STDOUT

       The  standard  output  shall  be  equivalent  to  the  input  files  with  the   specified
       <space>-to-<tab> conversions.

STDERR

       The standard error shall be used only for diagnostic messages.

OUTPUT FILES

       None.

EXTENDED DESCRIPTION

       None.

EXIT STATUS

       The following exit values shall be returned:

        0    Successful completion.

       >0    An error occurred.

CONSEQUENCES OF ERRORS

       Default.

       The following sections are informative.

APPLICATION USAGE

       One non-intuitive aspect of unexpand is its restriction to leading <space> characters when
       neither -a nor -t is specified. Users who always want to convert all <space> characters in
       a file can easily alias unexpand to use the -a or -t 8 option.

EXAMPLES

       None.

RATIONALE

       On  several  occasions,  consideration  was  given  to  adding a -t option to the unexpand
       utility to complement the -t in expand (see expand).  The historical  intent  of  unexpand
       was  to  translate  multiple  <blank>  characters  into  tab stops, where tab stops were a
       multiple of eight column positions on most UNIX systems.  An  early  proposal  omitted  -t
       because  it  seemed outside the scope of the User Portability Utilities option; it was not
       described in any of the base documents for IEEE Std 1003.2‐1992.  However, hard-coding tab
       stops  every  eight  columns  was  not  suitable for the international community and broke
       historical precedents for some vendors in the FORTRAN community, so  -t  was  restored  in
       conjunction  with  the  list  of  valid  extension  categories  considered by the standard
       developers. Thus, unexpand is now the logical converse of expand.

FUTURE DIRECTIONS

       None.

SEE ALSO

       expand, tabs

       The Base Definitions volume of POSIX.1‐2017, Chapter  8,  Environment  Variables,  Section
       12.2, Utility Syntax Guidelines

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1-2017, Standard for Information Technology -- Portable  Operating  System  Interface
       (POSIX),  The  Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by
       the Institute of Electrical and Electronics Engineers, Inc and The  Open  Group.   In  the
       event  of  any  discrepancy  between this version and the original IEEE and The Open Group
       Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

       Any  typographical  or  formatting errors that appear in this page are most likely to have
       been introduced during the conversion of the source files to man page  format.  To  report
       such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .