Man Linux: Main Page and Category List

NAME

       trs - filter replacing strings

SYNOPSIS

       trs [-[r]e] ’REPLACE_THIS WITH_THAT [AND_THIS WITH_THAT]...’
       trs [-[r]f] FILE

DESCRIPTION

       Copy  stdin  to  stdout replacing every occurence of given strings with
       other ones. This is similar to tr(1), but replaces  strings,  not  only
       single chars.

       Rules  (separated by whitespace) can be given directly after -e option,
       or can be read from FILE.  Argument not preceded by -e or -f is guessed
       to  be  a  script  when  it  contains  some  whitespace,  or a filename
       otherwise.

       Comments are allowed from # until the end of line. The character  #  in
       strings must be specified as \#.

       Standard C-like escapes \a \b \e \f \n \r \t \v \\ \nnn are recognized.
       In addition, \s means a space character and \! means an empty string.

       Sets of acceptable characters at a  given  position  can  be  specified
       between  \[  and  ].   ASCII  ranges  in sets can be shortly written as
       FIRST-LAST.  When a set consists of only a single range, \[ and \]  can
       be omitted.

       When  a  part  of  the string to translate is enclosed in \{...\}, only
       that part is replaced. Any text outside \{...\} serves as an assertion:
       a  string  is  translated  only if it is preceded by the given text and
       followed by another one.  \{ at the beginning or \} at the end  of  the
       string can be omitted. Text outside \{...\} is treated as untranslated.

       Before the beginning of the file and after its end there are only \n’s.
       Thus,  for  example, \n\{.\}\n matches . on a line by itself, including
       the first line, and the last one even without the \n marker.

       A fragment of the form \?x=N, where x is a letter A-Za-z  and  N  is  a
       digit  0-9,  contained  in  the  target text sets the variable x to the
       value N when that rule succeeds. Similar fragment in  the  source  text
       causes  the  given rule to be considered only if that variable has such
       value.   Initially  all  variables  have  the  value  of  0.    Several
       assignments  or  conditions can be present in one rule - they are ANDed
       together.

   OPTIONS
       -e     Give the translation rules directly in the command line.

       -f     Get them from the file specified.

       -r     Reverse every rule. This affects only the next -e or -f  option.
              Of course this doesn’t have to give the reverse translation! Any
              rule containing any of  \{\}\[\]\{\}\-  is  taken  in  only  one
              direction.  You  may  force  any  rule  to  be taken in only one
              direction by enclosing the string to translate in \{...\}.

       --help display help and exit

       --version
              output version information and exit

       Multiple -e or -f options are allowed. All rules  are  loaded  together
       then, and earlier ones have precedence.

EXAMPLE

       $ echo Leeloo |trs -e ’el n e i i aqq o\}\n x o u’
       Linux

DIFFERENCES FROM sed

       The  main  difference between trs and seds///g; ...’ (excluding sed’s
       regular expressions)  is  that  sed  takes  every  rule  in  the  order
       specified  and applies it to the whole line of translated file, whereas
       trs examines every position and tries all rules in this place first. In
       sed  every next rule is fed with the text produced by the previous one,
       whereas in trs every piece of text can be translated at most  once  (if
       more  than  one  rule  matches  at  a given position, the one mentioned
       earlier wins). That’s why sed isn’t well suited for translating between
       character  sets. On the other hand, tr translates only single bytes, so
       it can’t be used for Unicode  conversions,  or  TeX  /  SGML  ways  for
       specifying extended characters.

       Another example:
       $ echo 642 |trs -e ’4 7 72 66 64 4’
       42
       $ echo 642 |sed ’s/4/7/g; s/72/66/g; s/64/4/g’
       666

       The  string  to  replace  can be empty; there must be something outside
       \{\} then. In this special case only one such create-from-nothing  rule
       can  success  at a given position. For example, \}\x80\-\xFF @ precedes
       every character with high byte set with @.  The rule of the form some\{
       thing doesn’t work at the end of a file.

SEE ALSO

       tr(1), konwert(1)

COPYRIGHT

       trs  is  a  filter  replacing  strings.  It  forms  part of the konwert
       package.

       Copyright (c) 1998 Marcin ’Qrczak’ Kowalczyk

       This program is free software; you can redistribute it and/or modify it
       under  the  terms of the GNU General Public License as published by the
       Free Software Foundation; either version 2 of the License, or (at  your
       option) any later version.

       This  program  is  distributed  in the hope that it will be useful, but
       WITHOUT  ANY  WARRANTY;  without   even   the   implied   warranty   of
       MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR  PURPOSE.  See the GNU
       General Public License for more details.

       You should have received a copy of the GNU General Public License along
       with this program; if not, write to the Free Software Foundation, Inc.,
       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

AUTHOR

        __("<   Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.home.ml.org/
        \__/       GCS/M d- s+:-- a21 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++
         ^^                W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
       QRCZAK                  5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-