sed: Centering lines

 
 7.2 Centering Lines
 ===================
 
 This script centers all lines of a file on a 80 columns width.  To
 change that width, the number in '\{...\}' must be replaced, and the
 number of added spaces also must be changed.
 
    Note how the buffer commands are used to separate parts in the
 regular expressions to be matched--this is a common technique.
 
      #!/usr/bin/sed -f
 
      # Put 80 spaces in the buffer
      1 {
        x
        s/^$/          /
        s/^.*$/&&&&&&&&/
        x
      }
 
      # delete leading and trailing spaces
      y/<TAB>/ /
      s/^ *//
      s/ *$//
 
      # add a newline and 80 spaces to end of line
      G
 
      # keep first 81 chars (80 + a newline)
      s/^\(.\{81\}\).*$/\1/
 
      # \2 matches half of the spaces, which are moved to the beginning
      s/^\(.*\)\n\(.*\)\2/\2\1/