tr [ --help ] [ --version ]
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).
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.
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'
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:
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
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.