tr(1)


NAME

tr - translate or delete characters

SYNOPSIS

tr [-cst] [--complement] [--squeeze-repeats] [--truncate-set1] string1 string2
tr {-s,--squeeze-repeats} [-c] [--complement] string1
tr {-d,--delete} [-c] string1
tr {-d,--delete} {-s,--squeeze-repeats} [-c] [--complement] string1 string2

GNU tr also accepts the --help and --version options.

DESCRIPTION

This manual page documents the GNU version of tr. tr copies the standard input to the standard output, performing one of the following operations:

  • translate, and optionally squeeze repeated characters in the result
  • squeeze repeated characters
  • delete characters
  • delete characters, then squeeze repeated characters from the result.

    The string1 and (if given) string2 arguments define ordered sets of characters, referred to below as set1 and set2. These sets are the characters of the input that tr operates on. The --complement (-c) option replaces set1 with its complement (all of the characters that are not in set1).

  • SPECIFYING SETS OF CHARACTERS

    The format of the string1 and string2 arguments resembles the format of regular expressions; however, they are not regular expressions, only lists of characters. Most characters simply represent themselves in these strings, but the strings can contain the shorthands listed below, for convenience. Some of them can be used only in string1 or string2, as noted below.

    Backslash escapes. A backslash followed by a character not listed below causes an error message.

    \a
    Control-G.

    \b
    Control-H.

    \f
    Control-L.

    \n
    Control-J.

    \r
    Control-M.

    \t
    Control-I.

    \v
    Control-K.

    \ooo
    The character with the value given by ooo, which is 1 to 3 octal digits.

    \\
    A backslash.

    Ranges. The notation `m-n' expands to all of the characters from m through n, in ascending order. m should collate before n; if it doesn't, an error results. As an example, `0-9' is the same as `0123456789'. Although GNU tr does not support the System V syntax that uses square brackets to enclose ranges, translations specified in that format will still work as long as the brackets in string1 correspond to identical brackets in string2.

    Repeated characters. The notation `[c*n]' in string2 expands to n copies of character c. Thus, `[y*6]' is the same as `yyyyyy'. The notation `[c*]' in string2 expands to as many copies of c as are needed to make set2 as long as set1. If n begins with a 0, it is interpreted in octal, otherwise in decimal.

    Character classes. The notation `[:class-name:]' expands to all of the characters in the (predefined) class named class-name. The characters expand in no particular order, except for the `upper' and `lower' classes, which expand in ascending order. When the --delete (-d) and --squeeze-repeats (-s) options are both given, any character class can be used in string2. Otherwise, only the character classes `lower' and `upper' are accepted in string2, and then only if the corresponding character class (`upper' and `lower', respectively) is specified in the same relative position in string1. Doing this specifies case conversion. The class names are given below; an error results when an invalid class name is given.

    alnum
    Betûk és számjegyek.

    alpha
    Betûk.

    blank
    Vízszintes fehér szóközök.

    cntrl
    Vezérlõ karakterek.
    digit
    Számok.

    graph
    Nyomtatható karakterek, nem számítva a szóközt.

    lower
    Kisbetûk.

    print
    Nyomtatható karakterek, beleértve a szóközt.

    punct
    Irásjelek.

    space
    Vízszintes vagy függõleges fehér szóközök.

    upper
    Nagybetûk.

    xdigit
    Hexadecimális számok.

    Ekvivalencia osztályok. A szintaxis `[=c=]' ki van terjesztve az összes karakterre, amelyek ekvivalensek c-vel, nem egy sajátos sorrendben. Az Ekvivalencia osztály a legújabb találmány arra hogy támogassa a nem angol ABC-t. De úgy tûnik, hogy nincs szabványos út, hogy definiáljuk õket, vagy meghatározzuk a tartalmukat. Ezért ezek nincsenek teljesen megvalósítva a GNU tr -ben; minden karakter ekvivalencia osztálya egyedül az adott karakterbõl áll, ami használhatatlanná teszi ezt a konstrukciót jelenleg.

    FORDÍTÁS

    tr fordítást végez, amikor string1 és string2 egyaránt adottak és a --delete (-d) opció nincs megadva. tr lefordít minden karaktert az inputjából, ami benne van set1-ben és összhangban van set2-vel. Azok a karakterek, amik nincsenek benne set1-ben változatlanok maradnak. Amikor egy karakter többször szerepel set1-ben és a megfelelõ karakterek set2-ben nem egyformák, akkor csak az utolsó lesz használva. Például a következõ két parancs ekvivalens:

    tr aaa xyz
    tr a z
    

    A tr általános használata az, hogy konvertáljon kisbetûs karaktereket nagybetûsekre. Ezt többféleképpen meg lehet csinálni. Például:

    tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
    tr a-z A-Z
    tr '[:lower:]' '[:upper:]'
    

    Amikor a tr elvégzi a fordítást, set1-nek és set2-nek egyforma hosszúnak kéne lenniük. Ha set1 rövidebb set2-nél, akkor az extra karakterek a set2 végén figyelmen kívül lesznek hagyva.

    Másrészrõl ha set1 hosszabb, mint set2, akkor ez nem szabványos; POSIX.2 azt mondja, hogy az eredmény nincs definiálva. Ebben a szituációban a BSD tr kiegészíti set2-t set1 hosszára, úgy hogy addig ismétli a set2-ben az utolsó karaktert, amíg szükséges. A System V tr set1-et rövidíti le úgy, hogy hossza megegyezzen set2-vel.

    Az alapértelmezés az, hogy a GNU tr úgy kezeli ezt az esetet, ahogy a BSD tr csinálja. Amikor a --truncate-set1 (-t) opció adott, a GNU tr úgy kezeli ezt az esetet, mint System V tr . Ez az opció csak a fordításra vonatkozik.

    A System V tr -hez hasonlóan ebben az esetben megtöri az aránylag általános BSD idiómát:

    tr -cs A-Za-z0-9 '\012'
    
    mert ez csak a nulla byte-okat konvertálja újsorkarakterré (az elsõ elem a set1 állományában), nem pedig minden nem alfanumerikust.

    ISMÉTLÉSEK MEGSZORÍTÁSA ÉS TÖRLÉS

    Amikor csak a --delete (-d) opció adott, tr eltávolítja az összes input karaktert, ami a set1-ben van.

    Amikor csak a --squeezing-repeats (-s) opció adott, tr a set1-ben lévõ összes ismétlõdõ karakterbõl álló sorozatot a sorozat egyetlen elemével helyettesíti.

    Amikor a --delete és a squeeze-repeats opció egyaránt adott, tr elõször véghezviszi a törléseket, használva a set1-et, majd kiszedi az ismétlõdõ részeket a maradék karakterekbõl, használva a set2-t.

    A --squeeze-repeats opció fordításkor is használható, ebben az esetben tr elõször véghezviszi a fordítást, azután kiszedi az ismétlõdõ részeket a maradék karakterekbõl, használva a set2-t.

    A következõ példák illusztrálják az opciók különbözõ kombinácóit:

    Az összes nulla byte eltávolítása:

    tr -d '\000'

    Ez konvertálja az összes nem alfanumerikus karaktert újsorkarakterré, azután a sok úsorkarakterbõl egyet csinál:

    tr -cs '[a-zA-Z0-9]' '[\n*]'

    Az összes ismétlõdõ úsorokkaraktert egyetlen úsorokkarakterré konvertál.

    tr -s '\n'

    GNU tr elfogadja a következõ opciókat, a többiek bármilyen kombinációjában .

    --help
    Kiír egy üzenetet és kilép egy állapotkóddal, jelezve a sikert.

    --version
    Kiírja a verziót a standard outputra és kilép.

    FIGYELMEZTETÕ ÜZENETEK

    A POSIXLY_CORRECT környezeti változó segítségével különbözõ figyelmeztetõ és hibaüzeneteket kapcsolhatunk ki, a POSIX.2-höz hasonló módon. Az üzenetek az alábbiak miatt jelenhetnek meg:

    1. Amikor a --delete opció adott, de a --squeeze-repeats nem, és a string2 is adott, a GNU tr utasítása alapértelmezés szerint kiír egy üzenetet a parancs használatáról, majd kilép, mert a string-t ki kelett volna hagyni. A POSIX specifikációja szerint ebben az esetben a string2-t muszály kihagyni. Az argumenteket figyelmen kívül hagyni rossz ötlet lenne.

    2. Amikor egy nem egyértelmû oktális escape adott, például: \400, ami igazából \40 és utána egy 0 számjegy, mert 400 oktális szám nem fér bele egy byte-ba.

    Vegyük észre, hogy a GNU tr nem nyújt teljes BSD, vagy System V kompatibilitást. Például: nincs lehetõség kikapcsolni a POSIX [:alpha:], [=c=], és [c*10] szerkezeteinek az értelmezését. Ezenkívül a GNU tr nem törli autómatikusan a nulla byte-okat, szemben a hagyományos UNIX verziókkal, melyekben nulla byte-ok használatára nincs lehetõség.