tr(1)


NÉV

tr - karakterek lecserélése, tömörítése és/vagy törlése

ÁTTEKINTÉS

tr [ -cdst ] [ --complement ] [ --delete ] [ --squeeze-repeats ] [ --truncate-set1 ] string1 [ string2 ]

tr   [  --help  ] [  --version ]

LEÍRÁS

tr átmásolja a standard bemenetet a standard kimenetre végrehajtva egyet a következő feladatok közül:

       

  • cserél, és választhatóan tömöríti az eredményben az ismétlődő karaktereket
  • tömöríti az ismétlődő karaktereket
  • karaktereket töröl
  • karaktereket töröl, majd tömöríti az eredményben az ismétlődő karaktereket.

    A string1 és (ha megadott) a string2 argumentumok egy rendezett karakterhalmazt határoznak meg, melyre lejebb SET1 és SET2-ként hivatkozunk. Ezek a halmazok azok a karakterei a bemenetnek, melyeken a tr működni fog. A --complement (-c) opció kicseréli a SET1-et az ő komplementerével (az összes karakter, ami nincs a SET1-ben).

  • OPCIÓK

    -c, --complement
    Kicseréli a SET1-et az ő komplementerével (az összes karakter, ami nincs a SET1-ben).

    -d, --delete
    Törli a bejövő karakterek közül azt, amelyik benne van a SET1-ben, nincs cserélés.

    -s, --squeeze-repeats
    Karaktersorozatot cserél ki egy karakterrel, miután elvégezte a cserélést vagy a törlést. Lecserél minden ismétlődő karaktersorozatot, ami benne van a SET1-ben, a karakter egyszeri előfordulásával.

    -t, --truncate-set1
    Mielőtt belekezdene a cserélésbe, először megcsonkítja a SET1-et a SET2 méretére.

    --help 
    Használati útmutatót ír a standard kimenetre, majd kilép.

    --version 
    A program verziójáról ír ki információt a standard kimenetre, majd kilép.

    KARAKTERHALMAZOK RÉSZLETEZÉSE

    A string1 és string2 argumentumok formátuma hasonlít a reguláris kifejezések formátumára; habár nem reguláris kifejezések, csak karakterlisták. A legtöbb karakter saját magát jelöli ezekben a füzérekben, de a füzér tartalmazhat lejebb felsorolt rövidítéseket a kényelem kedvéért. Néhány ezek közül csak a string1-ben vagy a string2-ben használható, lásd lejebb.

    Backslash szekvenciák

    Backslash után egy az alábbiakban fel nem sorolt karaktert írva hibaüzenetet kapunk.

    \a
    Control-G.

    \b
    Control-H.

    \f
    Control-L.

    \n
    Control-J.

    \r
    Control-M.

    \t
    Control-I.

    \v
    Control-K.

    \OOO
    Az OOO értékű karakter, ahol az OOO legfeljebb 3 oktális számjegy.

    \\
    Egy backslash.

    Tartományok

    A `m-fIn' jelölés feloldása az m-től az n-ig terjedő összes karakter növekvő sorrendben. m-nek n előtt kell elhelyezkednie, különben hibát eredményez. Például a `0-9' megfelel a `0123456789'-nak. Habár a GNU tr nem támogatja a System V szintaxist, ami szögletes zárójeleket használ a tartományok közrefogására, a cserélés, ami ebben a formátumban lett megadva működni fog, amennyiben a zárójelek a string1-ben összhangban vannak a string2-ben lévőkkel.

    Ismétlődő karakterek

    A `[c*fIn]' jelölés a string2-ben a c karakter n-szeri ismétlését jelenti. Így a `[y*6]' megfelel a `yyyyyy'-nak. A `[c*]' jelölés a string2-ben megfelel a c karakter annyiszoros másolatának, ahányra szükség van ahhoz, hogy a SET2 a SET1-gyel azonos hosszúságú legyen. Ha az n 0-val kezdődik, akkor oktálisan értelmezi, egyébként decimálisan.

    Karakter osztályok

    A `[:class-name:]' jelölés feloldása az összes class-name (előre definiált) osztálybeli karakter. A kifejtett karaktereknek nincsen pontos sorrendje, kivéve az `upper' és `lower' osztályokat, melyek növekvő sorrendben fejtődnek ki. Amennyiben a --delete (-d) és --squeeze-repeats (-s) opciók mindegyikét megadta, bármelyik karakterosztály használható a string2-ben. Egyébként csak a `lower' és `upper' adható meg a string2-ben, és csak akkor, ha a megfelelő karakterosztályokat (`upper' és `lower', külön-külön) ugyanazon a relatív helyen adták meg a string1-ben. Ez kisbetű-nagybetű átalakítást hajt végre. Érvénytelen osztálynév hibát eredményez. Az alábbi osztálynevek léteznek:

    alnum
    Betűk és számok.

    alpha
    Betűk.

    blank
    Vízszintes fehérszóközök.

    cntrl
    Vezérlő karakterek.

    digit
    Számok.

    graph
    Nyomtatható karakterek, a szóközt kivéve.

    lower
    Kisbetűk.

    print
    Nyomtatható karakterek, a szóközzel együtt.

    punct
    Írásjelek.

    space
    Vízszintes vagy függőleges fehérszóközök.

    upper
    Nagybetűk.

    xdigit
    Hexadecimális számok.

    Ekvivalencia osztályok

    A `[=c=]' szintaxis feloldása az összes karakternek, ami egyenértékű a c karakterrel, nem meghatározott sorrendben. Az ekvivalencia osztály egy újkeletű talalmány, ami a nem angol ábécéket szándékozik támogatni. Viszont úgy látszik, hogy nincs irányadó módja annak, hogyan definiáljuk vagy határozzuk meg a tartalmukat. Emiatt nem megvalósított ez a GNU tr -ben; minden karakter ekvivalencia osztálya csak saját magából áll, ami jelenleg hasznavehetetlenné teszi ezt a lehetőséget.

    CSERÉLÉS

    A tr cserélést végez, ha a string1 és a string2 is megadásra került és a --delete (-d) opció nem lett megadva. A tr lecseréli a bemenetének összes karakterét, ami benne van a SET1-ben, a SET2 beli megfelelő karakterre. A karakterek, melyek nem szerepelnek a SET1-ben változatlanul maradnak. Amennyiben egy karakter többször is előfordul a SET1-ben és az összes megfelelő karakter nem ugyanaz, akkor az utolsót veszi csak figyelembe. Például az alábbi két parancs azonos:

    tr aaa xyz
    tr a z
    

    Egy gyakori alkalmazása a tr parancsnak a kisbetűk nagybetűvé alakítása. Ez megoldható több módon. Itt van közüllük három:

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

    Amikor a tr cserélést hajt végre, a SET1-nek és a SET2-nek azonos hosszúságúnak kell lennie. Ha a SET1 rövidebb a SET2-nél, a felesleges karaktereket a SET2 végéről figyelmen kívül hagyja.

    Másrészt, ha a SET1 hosszabb a SET2-nél, akkor nem lesz hordozható a kód; POSIX.2 szerint az eredmény nem meghatározott. Ebben az esetben a BSD tr kibővíti a SET1-t a SET2 hosszára a SET2 utolsó karakterének megfelelő számú ismétlésével. A System V tr levágja a SET1-et a SET1 hosszára.

    Alapértelmezés szerint a GNU tr ezt az esetet a BSD tr-jéhez hasonlóan csinálja. Ha a --truncate-set1 (-t) opció megadásra került, a GNU tr a System V tr-jéhez hasonlóan csinálja. Ezt az opciót figyelmen kívül hagyja a cserélési eljáráson kívül.

    A System V tr ebben az esetben megszakítja a relatív gyakori BSD stílust:

    tr -cs A-Za-z0-9 '\012'
    
    mert ez csak a nulla bájtot fogja átalakítani (az első tagját a SET1 komplementerének), ahelyett, hogy az összes nem alfanumerikus karaktert lecserélné újsor karakterre.

    ISMÉTLŐDÉSEK ÖSSZEHÚZÁSA ÉS TÖRLÉS

    Amennyiben csak a --delete (-d) opció került megadásra, a tr eltávolít minden karaktert, amely a SET1-ben szerepel.

    Amennyiben csak a --squeeze-repeats (-s)opció került megadásra, a tr lecseréli az összes bemeneti, SET1-ben lévő karaktersorozatot az egyszeri előfordulásával.

    Amennyiben a --delete és a --squeeze-repeats opció is megadásra került, a tr először elvégzi a törlést a SET1 felhasználásával, majd az összehúzást a maradék karaktereken a SET2 felhasználásával.

    A --squeeze-repeats opció a cseréléssel együtt is használható, ezesetben a tr először végrehajtja a cserét, majd összevonja az ismétlődő karaktereket a SET2 felhasználásával.

    Itt van néhány példa az különböző opciók variálásának bemutatására:

  • Az összes nulla bájt eltávolítása:

    tr -d '\000'

  • Az összes szó különböző sorokba bontása. Az összes nem alfanumerikus karaktert újsor karakterre cseréli, majd az ismétlődő újsor karaktereket összevonja egyetlenné:

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

  • Az összes ismétlődő újsor karaktert egyetlenné vonja össze:

    tr -s '\n'
    

  • A szavak dupla előfordulásának megtalálása. Például az emberek gyakran írják a "the the" ismétlődő szavakat egy újsor karakterrel elválasztva. Az alábbi bourne shell script először átkonvertálja az írásjelek és a szóközök sorozatát egy újsor karakterré, amitől minden "szó" külön sorba kerül. Ezután átírja az összes nagybetűt kicsire, és végül elindítja a uniq(1) parancsot a -d opcióval, hogy csak az ismétlődő szavakat írja ki.

    #!/bin/sh
    cat "$@" \
    | tr -s '[:punct:][:blank:]' '\n' \
    | tr '[:upper:]' '[:lower:]' \
    | uniq -d
    

  • POSIX KOMPATIBILITÁS

    A POSIXLY_CORRECT környezeti változó beállításával kikapcsolhatunk számos figyelmeztető- és hibaüzenetet a szigorúbb POSIX.2 megfelelés érdekében. Az üzenetek normálisan a következő körülmények között fordulnak elő:

            1. Amikor a --delete opciót megadtuk, de a --squeeze-repeats-t nem, és a string2-t is megadtuk, a GNU tr alapértelmezés szerint kiír egy használati üzenetet és kilép, mert a string2 nem kerül felhasználásra. A POSIX specifikáció szerint a string2-t figyelmen kívül kell hagyni ebben az esetben. Csendben figyelmen kívül hagyni egy argumentumot rossz ötlet.

            2. Amikor egy félreérthető oktális kód kerül megadásra. Például a \400 egy \40 majd egy 0, mert a 400 oktális szám nem fér bele egy bájtba.

    Fontos, hogy a GNU tr nem teljesen kompatibilis a BSD vagy a System V változattal. Például nincsen opció a [:alpha:], [=c=] és [c*10] POSIX értelmezések kikapcsolásához. A GNU tr a nulla karaktert sem törli automatikusan, ellentétben a tradícionális UNIX variánsokkal, amelyeknél nincs lehetőség a nulla bájt megvédésére.

    MEGJEGYZÉS

    Hibajelentéseket a bug-textutils@gnu.org címre küldd.
    Ezt a kézikönyv lapot Ragnar Hojland Espinosa <ragnar@macula.net> írta.

    MAGYAR FORDÍTÁS

    Nagy Ernő <ned@elte.hu>