# unexpand

## 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(1p)).  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.
    


* * *