.TH TR 1 "15 August 1999" "GNU textutils 2.0" .SH NÉV \fBtr\fR \- karakterek lecserélése, tömörítése és/vagy törlése .SH ÁTTEKINTÉS .B tr .RB [ \-cdst ] .RB [ \-\-complement ] .RB [ \-\-delete ] .RB [ \-\-squeeze\-repeats ] .RB [ \-\-truncate-set1 ] .IR string1 " [" string2 ] .BR tr " [" \-\-help "] [" \-\-version ] .SH LEÍRÁS .B tr átmásolja a szabványos bemenetet a szabványos kimenetre végrehajtva egyet a következő feladatok közül: .IP \fB\(bu\fR cserél, és választhatóan tömöríti az eredményben az ismétlődő karaktereket .br \fB\(bu\fR tömöríti az ismétlődő karaktereket .br \fB\(bu\fR karaktereket töröl .br \fB\(bu\fR karaktereket töröl, majd tömöríti az eredményben az ismétlődő karaktereket. .PP A \fIstring1\fP és (ha megadott) a \fIstring2\fP argumentumok egy rendezett karakterhalmazt határoznak meg, melyre lejebb \fISET1\fR és \fISET2\fR-ként hivatkozunk. Ezek a halmazok azok a karakterei a bemenetnek, melyeken a \fBtr\fR működni fog. A \fB\-\-complement\fR (\fB\-c\fR) opció kicseréli a \fISET1\fR-et az ő komplementerével (az összes karakter, ami nincs a \fISET1\fR-ben). .SH OPCIÓK .TP .B \-c, \-\-complement Kicseréli a \fISET1\fR-et az ő komplementerével (az összes karakter, ami nincs a \fISET1\fR-ben). .TP .B \-d, \-\-delete Törli a bejövő karakterek közül azt, amelyik benne van a \fISET1\fR-ben, nincs cserélés. .TP .B \-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 \fISET1\fR-ben, a karakter egyszeri előfordulásával. .TP .B \-t, \-\-truncate-set1 Mielőtt belekezdene a cserélésbe, először megcsonkítja a \fISET1\fR-et a \fISET2\fR méretére. .TP .B "\-\-help" Használati útmutatót ír a szabványos kimenetre, majd kilép. .TP .B "\-\-version" A program verziójáról ír ki információt a szabványos kimenetre, majd kilép. .SH "KARAKTERHALMAZOK RÉSZLETEZÉSE" .PP A \fIstring1\fP és \fIstring2\fP 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 \fIstring1\fP-ben vagy a \fIstring2\fP-ben használható, lásd lejebb. .SS Backslash szekvenciák Backslash után egy az alábbiakban fel nem sorolt karaktert írva hibaüzenetet kapunk. .RS .TP .B \ea Control-G. .TP .B \eb Control-H. .TP .B \ef Control-L. .TP .B \en Control-J. .TP .B \er Control-M. .TP .B \et Control-I. .TP .B \ev Control-K. .TP .B \eOOO Az \fIOOO\fP értékű karakter, ahol az \fIOOO\fP legfeljebb 3 oktális számjegy. .TP .B \e\e Egy backslash. .PP .SS Tartományok A `\fIm\fP\-\fIn\fP' jelölés feloldása az \fIm\fP-től az \fIn\fP-ig terjedő összes karakter növekvő sorrendben. \fIm\fP-nek \fIn\fP 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 \fBtr\fR 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 \fIstring1\fP-ben összhangban vannak a \fIstring2\fP-ben lévőkkel. .SS Ismétlődő karakterek A `[\fIc\fP*\fIn\fP]' jelölés a \fIstring2\fP-ben a \fIc\fP karakter \fIn\fP-szeri ismétlését jelenti. Így a `[y*6]' megfelel a `yyyyyy'-nak. A `[\fIc\fP*]' jelölés a \fIstring2\fP-ben megfelel a \fIc\fP karakter annyiszoros másolatának, ahányra szükség van ahhoz, hogy a \fISET2\fP a \fISET1\fP-gyel azonos hosszúságú legyen. Ha az \fIn\fP 0-val kezdődik, akkor oktálisan értelmezi, egyébként decimálisan. .SS Karakter osztályok A `[:\fIclass-name\fP:]' jelölés feloldása az összes \fIclass-name\fP (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 .B \-\-delete (\fB\-d\fR) és .B \-\-squeeze\-repeats (\fB\-s\fR) opciók mindegyikét megadta, bármelyik karakterosztály használható a \fIstring2\fP-ben. Egyébként csak a `lower' és `upper' adható meg a \fIstring2\fP-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 \fIstring1\fP-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: .RS .TP .B alnum Betűk és számok. .TP .B alpha Betűk. .TP .B blank Vízszintes fehérszóközök. .TP .B cntrl Vezérlő karakterek. .TP .B digit Számok. .TP .B graph Nyomtatható karakterek, a szóközt kivéve. .TP .B lower Kisbetűk. .TP .B print Nyomtatható karakterek, a szóközzel együtt. .TP .B punct Írásjelek. .TP .B space Vízszintes vagy függőleges fehérszóközök. .TP .B upper Nagybetűk. .TP .B xdigit Hexadecimális számok. .PP .SS Ekvivalencia osztályok A `[=\fIc\fP=]' szintaxis feloldása az összes karakternek, ami egyenértékű a \fIc\fP 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 .BR tr -ben; minden karakter ekvivalencia osztálya csak saját magából áll, ami jelenleg hasznavehetetlenné teszi ezt a lehetőséget. .SH CSERÉLÉS .PP A .B tr cserélést végez, ha a \fIstring1\fP és a \fIstring2\fP is megadásra került és a \fB\-\-delete\fR (\fB\-d\fR) opció nem lett megadva. A \fItr\fP lecseréli a bemenetének összes karakterét, ami benne van a \fISET1\fP-ben, a \fISET2\fP beli megfelelő karakterre. A karakterek, melyek nem szerepelnek a \fISET1\fP-ben változatlanul maradnak. Amennyiben egy karakter többször is előfordul a \fISET1\fP-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: .sp .RS .nf tr aaa xyz tr a z .fi .RE .sp Egy gyakori alkalmazása a .B tr parancsnak a kisbetűk nagybetűvé alakítása. Ez megoldható több módon. Itt van közüllük három: .RS .nf tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]' .fi .RE .PP Amikor a \fBtr\fR cserélést hajt végre, a \fISET1\fP-nek és a \fISET2\fP-nek azonos hosszúságúnak kell lennie. Ha a \fISET1\fP rövidebb a \fISET2\fP-nél, a felesleges karaktereket a \fISET2\fP végéről figyelmen kívül hagyja. .PP Másrészt, ha a \fISET1\fP hosszabb a \fISET2\fP-nél, akkor nem lesz hordozható a kód; POSIX.2 szerint az eredmény nem meghatározott. Ebben az esetben a BSD \fBtr\fR kibővíti a \fISET1\fP-t a \fISET2\fP hosszára a \fISET2\fP utolsó karakterének megfelelő számú ismétlésével. A System V \fBtr\fR levágja a \fISET1\fP-et a \fISET1\fP hosszára. .PP Alapértelmezés szerint a GNU \fBtr\fR ezt az esetet a BSD \fBtr\fR-jéhez hasonlóan csinálja. Ha a \fB\-\-truncate-set1\fR (\fB\-t\fR) opció megadásra került, a GNU \fBtr\fR a System V \fBtr\fR-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. .PP A System V \fBtr\fR ebben az esetben megszakítja a relatív gyakori BSD stílust: .RS .nf tr -cs A-Za-z0-9 '\e012' .fi .RE mert ez csak a nulla bájtot fogja átalakítani (az első tagját a \fISET1\fR komplementerének), ahelyett, hogy az összes nem alfanumerikus karaktert lecserélné újsor karakterre. .SS "ISMÉTLŐDÉSEK ÖSSZEHÚZÁSA ÉS TÖRLÉS" .PP Amennyiben csak a \fB\-\-delete\fR (\fB\-d\fR) opció került megadásra, a .B tr eltávolít minden karaktert, amely a \fISET1\fP-ben szerepel. .PP Amennyiben csak a \fB-\-squeeze\-repeats\fR (\fB\-s\fR)opció került megadásra, a .B tr lecseréli az összes bemeneti, \fISET1\fR-ben lévő karaktersorozatot az egyszeri előfordulásával. .PP Amennyiben a \fB\-\-delete\fR és a \fB\-\-squeeze\-repeats\fR opció is megadásra került, a \fBtr\fR először elvégzi a törlést a \fISET1\fR felhasználásával, majd az összehúzást a maradék karaktereken a \fISET2\fR felhasználásával. .PP A \fB\-\-squeeze\-repeats\fR opció a cseréléssel együtt is használható, ezesetben a \fBtr\fR először végrehajtja a cserét, majd összevonja az ismétlődő karaktereket a \fISET2\fR 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: \fB\(bu\fR Az összes nulla bájt eltávolítása: .sp .RS tr \-d '\e000' .fi .RE .sp \fB\(bu\fR 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é: .sp .RS .nf tr \-cs '[a-zA-Z0-9]' '[\en*]' .fi .RE .sp \fB\(bu\fR Az összes ismétlődő újsor karaktert egyetlenné vonja össze: .sp .RS .nf tr \-s '\en' .fi .RE .sp \fB\(bu\fR 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 \fBuniq\fR(1) parancsot a \fB\-d\fR opcióval, hogy csak az ismétlődő szavakat írja ki. .sp .RS .nf #!/bin/sh cat "$@" \e | tr \-s '[:punct:][:blank:]' '\en' \e | tr '[:upper:]' '[:lower:]' \e | uniq \-d .fi .RE .sp .SH "POSIX KOMPATIBILITÁS" .PP 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ő: .IP 1. Amikor a \fB\-\-delete\fR opciót megadtuk, de a \fB\-\-squeeze\-repeats\fR-t nem, és a \fIstring2\fP-t is megadtuk, a GNU \fBtr\fR alapértelmezés szerint kiír egy használati üzenetet és kilép, mert a \fIstring2\fP nem kerül felhasználásra. A POSIX specifikáció szerint a \fIstring2\fP-t figyelmen kívül kell hagyni ebben az esetben. Csendben figyelmen kívül hagyni egy argumentumot rossz ötlet. .IP 2. Amikor egy félreérthető oktális kód kerül megadásra. Például a \e400 egy \e40 majd egy 0, mert a 400 oktális szám nem fér bele egy bájtba. .PP Fontos, hogy a GNU \fBtr\fR 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 \fBtr\fR 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. .SH MEGJEGYZÉS Hibajelentéseket a \fBbug-textutils@gnu.org\fR címre küldd. .br Ezt a kézikönyv lapot Ragnar Hojland Espinosa írta. .SH MAGYAR FORDÍTÁS Nagy Ernő