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 szabványos bemenetet a szabványos 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 szabványos kimenetre, majd kilép. |
−−version
A program verziójáról ír ki információt a szabványos 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−n’ 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*n]’ 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. |
|||
|
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 [AT] gnu.org címre küldd.
Ezt a kézikönyv lapot Ragnar Hojland Espinosa
<ragnar [AT] macula.net> írta.
MAGYAR FORDÍTÁS
Nagy Ernő <ned [AT] elte.hu>